2013-05-16 154 views
0

我正在試驗Google關閉庫,特別是它的「繼承」方法。Google Closure庫繼承屬性

我有一個問題。當我擴展一個基類時,如果我沒有在其構造函數中設置基類的屬性,那麼所有的孩子最終都會共享這些屬性,例如,如果我將項添加到數組中,則該數組只會越來越大。

有人可以解釋爲什麼我需要在構造函數中設置屬性?

這裏是我的例子,如果你註釋掉「this.list = [9,8,7];」在'Person'構造函數中,子項共享人員列表並不斷添加它。

http://jsbin.com/imujoy/1/edit

感謝您的幫助。

回答

0

當您從孩子中引用「this.list」時,它首先查看對象本身以查找該屬性。當它找不到它時,它會查看其原型並找到「list」數組。但是,該列表是對您在Person原型上創建的同一列表的參考。如果您在構造函數中分配了一個新的「this.list」,那麼您只需在對象上而不是原型上指定一個屬性即可。一般來說,如果您打算使用繼承模型,則不應在原型上分配非基元類型(數組,對象),因爲子元素將共享相同的引用。

+0

一個很好的例子可以重新分配prototpe值屬性,當你設置一個默認值:Man.property.hands = 2 Man的所有實例並且它的子類將有2隻手,但是您可以更改它與實例中與電鋸發生小故障的實例JerryHandy。 – HMR