在进行原型(prototype)继承时,要求将 child 的构造函数返回给下面的自己,
A = function() {}
B = function() {}
B.prototype = new A;
B.prototype.constructor = B;
如果不这样做会有什么不利影响?
编辑
- 正如
@GGG
和@CMS
所解释的,构造函数对齐不需要 对new Child(...)
创建子对象有影响,但是 有必要在以后正确反射(reflect)子对象的构造函数。 @GGG
还提出了一种防御性替代方案来扩展 原型(prototype)链。而Child.prototype = new Parent(...)
包括 parent 对 child 的属性,Child.prototype = Object.create(Parent.prototype)
没有。
最佳答案
首先,请不要这样做:
B.prototype = new A;
改为执行此操作(shim Object.create
适用于旧浏览器):
B.prototype = Object.create(A.prototype);
至于constructor
,如果你不这样做,什么都不会破坏,但如果你不这样做:
A = function() {};
var a = new A();
console.log(a.constructor); // A
B = function() {};
var b = new B();
console.log(b.constructor); // A (!)
...将原型(prototype)的 constructor
属性设置回实际的构造函数允许您这样做:
B.prototype.constructor = B;
var b = new B();
console.log(b.constructor); // B
关于javascript - 原型(prototype)继承的构造函数分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488905/