2016-01-20 94 views
0

我就需要繼承如下功能工作:在原型繼承覆蓋陣列

function parent() {} 
parent.prototype.someProperty = ['common']; 

var child1 = new parent(); 

我要重寫的一些屬性。如果這是一種原始數據類型,那很容易,但someProperty是一個數組。 這裏child1在someProperty中有一些其他值,如['common', 'common2', 'common3']

現在,這是一個數組,因此如果我推送像child1.someProperty.push('common2');這樣的元素,它們最終也會在parent中引用。

達到此目的的最佳方法是什麼?我想到的

  • 東西陣列從原型複製,然後將其連接到child1。問題在於,我將不得不遍歷整個數組然後複製它。我想知道是否有更優雅的解決方案。

  • 有類似function parent() { someProperty = ['common'];}。這將給所有的孩子someProperty,所以任何價值可以很容易地推入它,而不會打擾其他孩子的對象。

我傾向於第二種方法,但我只是想確定是否有更好的方法。

+1

第二個選項通常是應該如何完成的。如果您希望它在對象的所有實例之間共享,則只應將其直接附加到原型。 –

+0

感謝您的確認! –

回答

0

如果你有屬性會改變每個實例,他們更好的生活在實例本身,而不是原型。如果您有需要由某個班級的所有實例共享的數據,則您有兩個選項。

1)像你一直在拍打原型上的財產。這對於函數非常適用,但我幾乎從不在原型上放置數據/非函數引用。這部分是爲了風格,部分是爲了一致。

2)安裝屬性「靜態」的構造函數和像Circle.PI訪問它,而不是cirlceInstance.PI

你的情況,好像這個數組應該是一個實例屬性。

var Thing1 = function() { this.property = []; }

+0

您應該直接回答問題。 OP要求提供一種方法來定義可以由孩子覆蓋的父級屬性。你的回答沒有說​​清楚,並且沒有提及OP的代碼。 – gnerkus