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

三分:

MDN文章“面向对象的Java语言简介”中有关继承部分中,我注意到它们设置了prototype.constructor:

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

这有任何重要目的吗?可以省略吗?

韦恩:

它并不总是必需的,但是它确实有其用途。假设我们想在基Person上创建一个copy方法像这样:

// define the Person Class  
function Person(name) {
    this.name = name;
}  

Person.prototype.copy = function() {  
    // return new Person(this.name); // just as bad
    return new this.constructor(this.name);
};  

// define the Student class  
function Student(name) {  
    Person.call(this, name);
}  

// inherit Person  
Student.prototype = Object.create(Person.prototype);

现在,当我们创建一个新的Student并复制它时会发生什么?

var student1 = new Student("trinth");  
console.log(student1.copy() instanceof Student); // => false

该副本不是的实例Student这是因为(没有显式检查),我们无法Student从“基”类返回副本。我们只能返回Person但是,如果我们重置了构造函数:

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

...然后一切都按预期进行:

var student1 = new Student("trinth");  
console.log(student1.copy() instanceof Student); // => true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Python

为什么设置()构造函数比列表慢()

来自分类Javascript

为什么不能设置使用“绑定”创建的函数的“原型”?

来自分类Java

为什么Hibernate不需要参数构造函数?

来自分类Javascript

为什么不可能从原型更改构造函数?

来自分类Java

为什么JAXB的编组需要no arg构造函数?

来自分类Java

为什么实现Externalizable需要默认的公共构造函数?

来自分类Dev

为什么需要在构造函数中绑定函数

来自分类Dev

为什么在const成员struct中需要构造函数?

来自分类Dev

为什么在原型而不是构造函数中声明实例属性?

来自分类Dev

Singleton实现-为什么需要复制构造函数?

来自分类Dev

在构造函数内部*分配原型方法-为什么不呢?

来自分类Dev

为什么需要构造函数?

来自分类Dev

为什么移动构造函数的成员需要默认构造函数?

来自分类Dev

WCF [DataContract]类是否需要空白构造函数?为什么?

来自分类Dev

为什么我需要类型T的副本构造函数?

来自分类Dev

为什么需要在转换构造函数上引用this->?

来自分类Dev

为什么我们不能更改内置函数构造函数的原型?

来自分类Dev

设置函数构造函数原型(例如)

来自分类Dev

JS:为什么在继承另一个原型后,您需要将构造函数重置回去?

来自分类Dev

嵌套的构造函数。为什么需要它?

来自分类Dev

为什么需要在move构造函数中将rvalue引用设置为null?

来自分类Dev

为什么构造函数需要在类的后面精确命名?

来自分类Dev

构造函数为什么不设置参数?

来自分类Dev

为什么std :: vector的元素需要移动构造函数?

来自分类Dev

为什么在Atomic {Type} Array构造函数中需要volatileWrite

来自分类Dev

为什么需要使用多个构造函数?

来自分类Dev

为什么复制构造函数需要为const?

来自分类Dev

为什么原型的构造函数会引用回自身?

来自分类Dev

为什么构造函数中需要key?

Related 相关文章

  1. 1

    为什么设置()构造函数比列表慢()

  2. 2

    为什么不能设置使用“绑定”创建的函数的“原型”?

  3. 3

    为什么Hibernate不需要参数构造函数?

  4. 4

    为什么不可能从原型更改构造函数?

  5. 5

    为什么JAXB的编组需要no arg构造函数?

  6. 6

    为什么实现Externalizable需要默认的公共构造函数?

  7. 7

    为什么需要在构造函数中绑定函数

  8. 8

    为什么在const成员struct中需要构造函数?

  9. 9

    为什么在原型而不是构造函数中声明实例属性?

  10. 10

    Singleton实现-为什么需要复制构造函数?

  11. 11

    在构造函数内部*分配原型方法-为什么不呢?

  12. 12

    为什么需要构造函数?

  13. 13

    为什么移动构造函数的成员需要默认构造函数?

  14. 14

    WCF [DataContract]类是否需要空白构造函数?为什么?

  15. 15

    为什么我需要类型T的副本构造函数?

  16. 16

    为什么需要在转换构造函数上引用this->?

  17. 17

    为什么我们不能更改内置函数构造函数的原型?

  18. 18

    设置函数构造函数原型(例如)

  19. 19

    JS:为什么在继承另一个原型后,您需要将构造函数重置回去?

  20. 20

    嵌套的构造函数。为什么需要它?

  21. 21

    为什么需要在move构造函数中将rvalue引用设置为null?

  22. 22

    为什么构造函数需要在类的后面精确命名?

  23. 23

    构造函数为什么不设置参数?

  24. 24

    为什么std :: vector的元素需要移动构造函数?

  25. 25

    为什么在Atomic {Type} Array构造函数中需要volatileWrite

  26. 26

    为什么需要使用多个构造函数?

  27. 27

    为什么复制构造函数需要为const?

  28. 28

    为什么原型的构造函数会引用回自身?

  29. 29

    为什么构造函数中需要key?

热门标签

归档