这似乎不一致,但可能是由于我是JavaScript新的原型继承功能。javascript原型继承
基本上,我有两个基类属性,“列表”和“名称”。我实例化两个子类并给这些属性赋值。当我实例化第二个子类时,它从第一个子类实例中获取列表值,但只针对“列表”而不针对“名称”。这是怎么回事??当然,我宁愿任何后续的子类实例都不会从其他实例获取值,但如果发生这种情况,它应该是一致的!
下面的代码片段:
function A()
{
this.list = [];
this.name = "A";
}
function B()
{
}
B.prototype = new A();
var obj1 = new B();
obj1.list.push("From obj1");
obj1.name = "obj1";
var obj2 = new B();
//output:
//Obj2 list has 1 items and name is A
//so, the name property of A did not get replicated, but the list did
alert("Obj2 list has " + obj2.list.length + " items and name is "+ obj2.name);
谢谢大家的解释。所以,即使它说: B.prototype = new A(); 和 obj2 = new B(); A()的“list”属性没有重新创建,它只能被回收? 无论如何,我可以接受这个命运:)那么,有一个包含数组的基类的最佳方式是什么?我正在构建一棵树,需要一个通用的带子节点类。 – med 2009-10-07 22:11:00
非常好的解释。 – 2010-12-08 20:59:36