這似乎不一致,但可能是由於我是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