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