我在原型中保存了一個屬性_data
,作爲所有創建對象的定義。javascript原型繼承 - 共享屬性
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 = [];
當我創建具有值aa
對象a
並用值bb
對象b
,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對象成員可能被所有類實例共享]的重複(http://stackoverflow.com/questions/4425318/javascript-object-members-that-are-prototyped-as-arrays -become-shared-by-all-cla) – Bergi 2013-06-28 03:36:32