0

原型是继承的对象吗?通过该对象的所有实例,像我在下面的例子中的孩子。Javascript:如何创建原型对象的新实例?

它必须是父级的实例,否则父级的原型将不会被继承?

在这种情况下,目标是为每个子实例创建一个从父代继承的单独数组。

我不确定如何实现这一点。我知道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

http://blog.slaks.net/2013-09-03/traditional-inheritance-in-javascript/ – SLaks

+1

'parent.prototype.arr = [ ]。 “这总是错的;你只有一次实例。 – SLaks

+0

'child.prototype = new parent();'没有任何用处。创建Object的public * prototype *属性与private [[[Prototype]]'](http://ecma-international.org/ecma-262/5.1/#sec-8.6.2)完全不同从它的构造函数。 – RobG

回答

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

相关问题