为什么有必要设置原型构造函数?

为什么有必要设置原型构造函数?

MDN文章中有关继承的一节面向对象Javascript简介,我注意到他们设置了原型.构造函数:

// correct the constructor pointer because it points to PersonStudent.prototype.constructor = Student;

这有什么重要的用途吗?可以省略吗?


MMTTMM
浏览 391回答 3
3回答

拉风的咖菲猫

这有什么重要的用途吗?是和不是。在ES5和更早版本中,JavaScript本身没有使用constructor为了任何事。它定义了函数的默认对象prototype属性,并且它将引用该函数,并且就这样..说明书中没有任何其他内容提到它。这在ES 2015(ES6)中发生了变化,它开始在继承层次结构中使用它。例如,Promise#then使用constructor你对它的承诺的属性(通过物种构造)在建立新的回报承诺的时候。它还涉及到子类型数组(通过ArraySpeciesCreate).在语言本身之外,有时人们在试图构建通用的“克隆”函数时会使用它,或者只是当他们想要引用他们认为是对象的构造函数的时候。我的经验是,使用它是罕见的,但有时人们确实使用它。可以省略吗?默认情况下,您只需要将它放回取代函数上的对象prototype财产:Student.prototype = Object.create(Person.prototype);如果你不这么做Student.prototype.constructor = Student;.那么Student.prototype.constructor继承自Person.prototype(大概)constructor = Person..所以这是误导。当然,如果您正在子类使用它(比如Promise或Array)和不使用class(为您处理此问题),您需要确保设置正确。所以基本上:这是个好主意。如果您的代码(或您使用的库代码)中没有任何东西使用它,这是可以的。我一直确保它的连线正确。当然,还有ES 2015(又名ES6)class关键字,大多数时候我们都会使用它,我们不必再使用它了,因为当我们使用它的时候,它就会为我们处理。class Student extends Person {}¹ “.如果您正在子类使用它的东西(比如Promise或Array)和不使用class..."-它是.可能这样做,但这是一个真正的痛苦(有点傻)。你必须用Reflect.construct.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript