给定像这样
function BaseClass() {
}
function SubClass() {
BaseClass.call(this);
}
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.constructor = SubClass;
实现继承的标准方法为什么需要做
SubClass.prototype = Object.create(BaseClass.prototype);
并最终得到类似 function F(){}
F.prototype = BaseClass.prototype;
SubClass.prototype = new F();
的东西而不是只做
Subclass.prototype = BaseClass.prototype;
最佳答案
在 JavaScript 中为事物赋值实际上只是复制一个引用(除非使用原始类型)。所以当你这样做时:
Subclass.prototype = BaseClass.prototype;
您真正要做的是将
SubClass
的原型(prototype)分配到内存中与 BaseClass
的原型(prototype)相同的位置,因此您对 SubClass
所做的任何与原型(prototype)相关的更改也会影响 BaseClass
。这是一个小例子:function BaseClass() {
}
function SubClass() {
BaseClass.call(this);
}
SubClass.prototype = BaseClass.prototype;
SubClass.prototype.constructor = SubClass;
SubClass.prototype.subClassFunction = function(){
console.log("Added this to SubClass");
}
var baseObj = new BaseClass();
baseObj.subClassFunction(); // => "Added this to SubClass"
这就是为什么你想使用
SubClass.prototype = Object.create(BaseClass.prototype);
因为它将使用指定的原型(prototype)创建一个新的唯一对象。
您可以阅读有关此函数如何工作的更多信息 here 。
关于javascript原型(prototype)继承混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35191595/