2014-03-27 58 views
1

< JavaScript:好的部分>,Douglas引入了所謂的「僞古典」模式作爲實現繼承的方式之一。然而,看起來他給出的例子無法實現成員變量的繼承,因爲當構造「子類」時,原型繼承不會創建「超類」變量的副本。使用「僞古典」模式在JavaScript中實現成員變量繼承

對於一個具體的例子,讓我們考慮兩類:一的InputStream類,來處理一個潛在的輸入機制,以及提供了一種簡單接口由字節讀取字節;和一個Utf8InputStream類繼承InputStream並提供一個readUtf8接口讀取有效的UTF8字符。然後在「僞古典」模式下看起來有問題,因爲所有的Utf8InputStream將共享相同的底層InputStream,並且事情顯然會中斷。

在我看來,使用組合而不是繼承將很容易解決這個問題,但出於好奇,有沒有辦法在這裏實現成員變量的繼承?

+0

可能會有所幫助:同一道格談論權力構造和繼承 - @ 25分鐘10秒:https://www.youtube.com/watch?v=DwYPG6vreJg –

回答

1

然後在「僞古典」模式下看起來有問題,因爲所有的Utf8InputStream將共享相同的底層InputStream,並且事情明顯會中斷。

不,這只是當你做錯了,create an instance for the prototypeCorrect

function Utf8InputStream(…) { 
    InputStream.call(this, …); 
    … 
} 
Utf8InputStream.prototype = Object.create(InputStream.prototype);