gpt4 book ai didi

javascript原型(prototype)继承混淆

转载 作者:行者123 更新时间:2023-11-29 14:43:42 25 4
gpt4 key购买 nike

给定这样实现继承的标准方法

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com