【发布时间】:2013-03-05 04:43:02
【问题描述】:
我在原型中保存了一个属性_data 作为所有创建对象的定义。
function A() {}
A.prototype._data = [];
现在从A 创建的所有对象都具有_data 属性。
我想要原型继承,其中原型的_data 将具有来自原型链中所有原型的_data 值。
不知道直接方式,在这个例子中我使用了一个getter get()。
function A() {}
A.prototype._data = [];
A.prototype.add = function(rec) {
this.__proto__._data.push(rec);
}
A.prototype.get = function() {
if(typeof this.__proto__.constructor.prototype.get == 'function')
{
return this.__proto__.constructor.prototype.get().concat(this.__proto__._data);
}
else
{
return this.__proto__._data || [];
}
}
function B() {}
B.prototype = Object.create(A.prototype, { constructor: { value: B }});
B.prototype._data = [];
当我创建对象a 的值aa 和对象b 的值bb 时,b.get() 返回[aa, bb]。之后,如果原型A 的_data 将扩展为aaaa,则函数b.get() 返回[aa, aaaa, bb]。
var a = new A(), b = new B();
a.add('aa');
b.add('bb');
console.log(b.get()); // [aa, bb]
a.add('aaaa');
console.log(b.get()); // [aa, aaaa, bb]
// EDITED - _data in A prototype shoud be without B
console.log(a.get()); // [aa, aaaa]
这是一个很好的(标准)方法来实现这一点吗?我的意思是在 Object.create 时使用构造函数更正,并在 constructor.prototype 时引用父原型?
这是一个演示:http://jsfiddle.net/j9fKP/
所有这一切的原因是 ORM 库中方案的字段定义,其中允许方案的继承。子方案必须具有父方案的所有字段。
【问题讨论】:
标签: javascript inheritance prototype