我_data
在原型中保存了一个属性作为所有创建对象的定义。
function A() {}
A.prototype._data = [];
现在创建的所有对象A
都具有 property _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]
_data
A
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 库中方案的字段定义,其中允许方案的继承。子方案必须具有父方案的所有字段。