这有什么重要的用途吗?
是和不是。
在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
.