javascript - 将原型(prototype)添加到现有对象

标签 javascript oop inheritance prototype

我想使用 Javascript 进行一些继承。问题是我不知道如何在继承的对象上保留 A 类原型(prototype)。

这是我的代码:

function Base() {
    this.attribute1 = null;
}

Base.prototype = {
    baseFunction: function() {}
};

function SubBase()
{
    Base.call(this); // Constructor call
    this.baseFunction();
    this.subBaseFunction();
}

SubBase.prototype = Base.prototype;
SubBase.prototype = {
    subBaseFunction: function() {},
    subBaseOtherFunction: function() {}
}

通过这种方式,我删除了 Base.prototype 但我不想这样做。

我试过 SubBase.prototype.__proto__ = Base.prototype; 但是 it is apparently too slow .

我知道我可以做到(但是写起来太长而且对我来说不是那么干净):

SubBase.prototype.subBaseFunction = function() {};
SubBase.prototype.subBaseOtherFunction = function() {};

我怎样才能做得更好/写得更好?

最佳答案

首先,您实际上并不是从 Base 继承...您只是向其添加函数。

SubBase.prototype = Base.prototype;
SubBase.prototype.foo = true;
alert(Base.prototype.foo);

要建立继承链,需要分配一个base实例作为原型(prototype):

SubBase.prototype = new Base();

然后你扩充它,就像你在你的帖子中所做的那样:

SubBase.prototype.newFunction = function () { };

以这种方式进行继承的一个弱点是您的基类构造函数无法接收参数。如果需要,则需要使用 Object.create 设置继承,并手动调用基类构造函数:

function Base(x) {
    alert(x);
};
Base.prototype.baseFunction = function () {
    alert('called method from base class');
};

function SubBase(x) {
    Base.call(this, x);
};
SubBase.prototype = Object.create(Base.prototype);

var instance = new SubBase(1);
instance.baseFunction();

关于javascript - 将原型(prototype)添加到现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23528841/

相关文章:

c++ - 虚方法,operator=(), operator<<();

java - 如何从包含多种对象类型的数组列表实例化对象

javascript - 如何从自身调用导出函数?

javascript - 加密媒体扩展加密示例

javascript - 如何在JavaScript中获取过去的X-Frame-Options

javascript - "Object();"是 javascript 中的预定义函数吗?

c++ - 继承抛出的纯虚函数

javascript - golang javascript对象等效

javascript - 在类方法中删除元素后无法过滤数组

c# - 保存派生类的集合实例的基类