原型继承的构造函数赋值

时间:2012-02-28 20:06:58

标签: javascript prototypal-inheritance

在进行原型继承时,要求将子构造函数引用回自身,

A = function() {} 
B = function() {} 
B.prototype = new A;
B.prototype.constructor = B;

如果没有会产生什么不利影响?

修改

  • 作为@GGG& @CMS已经解释过,构造函数对齐没有 new Child(...)创建子对象的效果,但是 稍后正确反映子对象的构造函数所必需的。
  • @GGG也提出了扩展的防御性替代方案 原型链。虽然Child.prototype = new Parent(...) 包括父母对孩子的属性,Child.prototype = Object.create(Parent.prototype)没有。

1 个答案:

答案 0 :(得分:6)

首先,请不要这样做:

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 (!)

...将原型的constructor属性设置回实际的构造函数允许您这样做:

B.prototype.constructor = B;
var b = new B();
console.log(b.constructor); // B