给定这样实现继承的标准方法
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/