2012-11-01 78 views
0

在Javascript中,我正在尋找在構造函數有參數時如何繼承對象。我找到了這個問題的答案。如何將兩個父對象繼承到子對象,但第二個繼承對象的參數是第一個繼承對象

現在我需要繼承兩個父對象到一個子對象,但第二個繼承對象的參數是第一個繼承對象。這個怎麼做?

在艱難的道路:

function ChildObj() { 
    this.Parent1 = new ParentObj1 (arguments); 
    this.Parent2 = new ParentObj2 (this.Parent1); 
} 

但如何做到這一點的是這樣的:

function ChildObj() { 
    Parent1Obj.call (this, arguments) ; 
    Parent2Obj.call(this, <<-- how to indicate Parent1Obj as argument -->>) ; 
} 

回答

0

請首先,在JavaScript的繼承原型的方式通知你不能從兩個繼承不同的原型對象。當然這並沒有問你的問題,但假設ChildObjParent1.prototype繼承,你不能使用並不需要Parent2.prototype更多。這意味着您可能想要將Parent2從構造函數重構爲將方法添加到對象的常規函數​​ - 稱爲混合模式

如何告訴Parent2它在Parent1對象上被調用?

您不需要將其明確地作爲參數傳遞。使用鴨子打字,當前實例(this)可以被認爲是Parent1對象,因爲它已經從Parent1Obj.call(this, arguments)獲得了它的方法和其他屬性。假設您已正確設置原型鏈,則應用Parent2的對象也是instanceof Parent1

當然你也可以通過構造函數Parent1作爲this旁邊的附加參數。但是,我不確定mixin的行爲是否應該依賴於傳遞對象的[super]構造函數。可能會更好地傳遞一些更具描述性的選項,並讓ChildObj構造函數選擇正確的選項而不是Parent2函數。