javascript - 原型(prototype)继承的构造函数分配

标签 javascript prototypal-inheritance

在进行原型(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/

相关文章:

python - 实现原型(prototype)或实例化类对象

c# - 如何在 iframe 中加载网页

javascript - 将 javascript 类实例转换为普通对象保留方法

javascript - c xor 结果与 javascript xor 不同

javascript - 断言一个值恰好等于 undefined

javascript - 有人可以解释一下继承在 javascript 中是如何工作的吗

javascript - 如何覆盖面向对象的 Javascript 中的方法?

javascript - 在 Javascript 中实现多重继承

javascript - 如何在使用 Reactjs 时将数据写入 JSON 文件

javascript - Webaudio,播放声音两次