5

可能重复:
Javascript 构造函数属性的意义是什么?

在 developer.mozilla.org 的 Javascript文档中,关于继承的主题有一个例子

// inherit Person
Student.prototype = new Person();

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

我想知道为什么要在这里更新原型的构造函数属性?

4

1 回答 1

2

每个函数都有一个prototype属性(即使你没有定义它),prototype对象有唯一的属性constructor(指向一个函数本身)。因此,在你做了Student.prototype = new Person(); constructor属性prototype指向Person函数之后,你需要重新设置它。

您不应该将其视为prototype.constructor神奇的东西,它只是指向函数的指针。即使您跳过 line Student.prototype.constructor = Student;linenew Student();也会正常工作。

constructor属性很有用,例如在以下情况下(当您需要克隆对象但不确切知道创建它的函数时):

var st = new Student();
...
var st2 = st.constructor();

所以最好确保prototype.constructor()是正确的。

于 2013-01-10T10:10:34.663 回答