javascript原型(prototype)继承混淆

标签 javascript oop inheritance prototype

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

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/

相关文章:

javascript - HTML/Javascript 表单显示的值不正确

javascript - 选择位于 div JQuery 中的图像

java - 如何将单例引用传递给十个兄弟对象

c++ - 如果基类受到保护,则无法访问派生类中的转换

javascript - 如何阻止一个人多次加载一个函数jquery

Java Swing : Inner JFrame class closes main window on close

PHP 将附加数据传递给回调

java - 将值从 A 类返回到 B 类,然后返回到 Main 类?

c++ - 从外部代码加载阶段

javascript - 我的网站卡住 - 可能是 JavaScript,但我无法确定原因