2016-11-24 100 views
1

我有一個Base類作爲ES6延伸已經定義

class Base { 
    constructor() { 
     console.log('should get called') 
    } 
} 

Target類作爲

class Target { 
    someFn() { 
     // does something 
    } 
} 

我要讓Target延長Base其定義之後。我的意思是,我知道我可以簡單地做以下

class Target extends Base { ... } 

不過,我還是希望能夠將其定義後Base延伸Target

我嘗試了幾種方法,但並不完全滿意。那可能嗎?

我可以做class Base extends Target {}但它不再是同一類。

我的基本目標是;我想添加constructor到一個類(我知道我不能),所以找出一些方法。

+2

爲什麼你需要那個? – zerkms

+0

大聲笑,好問題......我其實不知道......:P好的,我會解釋一下,我想用一些方法來定義很多類,每個方法都返回一些計算結果。數據(這些公式將在其上運行)將在構造函數中傳遞(我要在其中進行預處理)...因此,我希望只使用公式方法保持公式類的清潔,並在我的修飾器中執行其他所有內容函數或基類...有意義嗎? –

+1

你的評論並沒有解釋你爲什麼要動態改變原型。它甚至不能解釋爲什麼你需要繼承。 – zeroflagL

回答

1

您可以通過設置子類原型的原型,使現有類「從另一個類繼承」。聽起來有點複雜,所以這裏的一切都需要:

class Base {} 
class Child {} 

Object.setPrototypeOf(Child.prototype, Base.prototype) 

然而,有一個疑難雜症:本Child的實施旨在不從其它類繼承 - 如果,例如,Base構造函數做一些重要的工作(很多時候,父構造函數做一些初始化步驟)這不會被稱爲,這意味着,你可能會遇到各種各樣的錯誤。

在您描述的上下文中,沒有可行的解決方案來編程擴展類確保父類的構造函數被調用。這是因爲沒有辦法「修補」子類的構造函數來實際調用父類的構造函數。

你可能會被覆蓋Child.prototype.constructor財產和修補它在那裏,但問題是,這是不是所謂當你做new Child(),這是Child功能本身 - constructor屬性不發揮作用在這個過程中。

+0

不,不會工作......我在上面的評論中解釋過。 –

+0

根據您的更新進行更新。不幸的是,我沒有辦法做到這一點。抱歉。 –

+0

傷心......無論如何感謝。 –