我想使用 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/