Javascript:如何创建原型对象的新实例?

时间:2014-01-31 01:29:32

标签: javascript inheritance prototype instance javascript-objects

原型是一个继承的对象?在对象的所有实例中,如下面的示例中的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? 

1 个答案:

答案 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