给定像这样

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/

10-13 06:27