【问题标题】:Javascript: How to create a new instance of the prototype object? [duplicate]Javascript:如何创建原型对象的新实例? [复制]
【发布时间】:2014-02-23 14:37:48
【问题描述】:

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

【问题讨论】:

标签: javascript inheritance prototype instance javascript-objects


【解决方案1】:

要给每个实例自己的数组,不要使用原型来保存数组,因为它在所有实例之间共享。您可以在父类的构造函数中初始化一个新数组,然后在子类中确保调用父类的构造函数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 2011-09-15
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多