herencia de prototipo javascript - propiedad compartida
He guardado una propiedad_data
en prototipo como definición para todos los objetos creados.
function A() {}
A.prototype._data = [];
Ahora todos los objetos creados desdeA
tener propiedad_data
.
Me gustaría prototipo de herencia, donde_data
de prototipo tendra_data
Valores de todos los prototipos en la cadena de prototipos.
No sé de manera directa, en este ejemplo uso un 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 = [];
Cuando creo objetoa
con valoresaa
y objetob
con valorbb
, b.get()
devoluciones[aa, bb]
. Y mas tarde si_data
de prototipoA
se ampliará conaaaa
funciónb.get()
devoluciones[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]
¿Es una buena manera (estándar) de cómo lograr esto? Me refiero a usar la corrección del constructor mientrasObject.create
y prototipo de referencia conconstructor.prototype
?
Aquí hay una demostración:http://jsfiddle.net/j9fKP/
El motivo de todo esto es la definición de campo para el esquema en la biblioteca ORM, donde se permite la herencia de esquemas. El esquema hijo debe tener todos los campos del esquema padre.