原型是一个继承的对象?在对象的所有实例中,如下面的示例中的child。
它必须是父项的实例,否则父项的原型将不会被继承?
在这种情况下,目标是为每个子实例创建一个从父级继承的单独数组。
我不确定如何实现这一目标。我知道extend。
extend方法是简单地将原型复制到新对象并将新方法应用到它上面吗?
我的代码示例+ jsfiddle:
function parent(){
}
parent.prototype.arr = [];
parent.prototype.add = function(item){
this.arr.push(item);
}
parent.prototype.show = function(){
for(var i = 0; i < this.arr.length; ++i){
$('body').append(this.arr[i]);
}
}
function child(childname){
this.add(childname);
}
child.prototype = new parent();
var child1 = new child('child1');
var child2 = new child('child2');
child2.show();//this should only show child2?
答案 0 :(得分:0)
要为每个实例提供自己的数组,请不要使用原型来保存数组,因为它在所有实例之间共享。您可以在父类的构造函数中初始化一个新数组,然后在子类中确保调用父类的构造函数:
function parent(){
this.arr = [];
}
function child() {
parent.call(this); // call parent constructor
}
child.prototype = Object.create(parent.prototype);
child.prototype.constructor = child;
现在每个父对象都有自己的数组副本,包括那些属于子后代的副本。
请参阅此MDN文章以获得一个很好的解释:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create