我對如何通過原型繼承實現代碼重用感到有些困惑。我在http://alexsexton.com/?p=51的示例中創建一個Speaker對象,並使用jQuery進行橋接。通過Javascript重用代碼原型繼承
說我想要一個新的揚聲器,類似於示例中的揚聲器,但現在帶有額外的聲音文件。我能想到的唯一的代碼是這樣的:
var AnotherSpeaker = Object.create(Speaker);
$.extend(true, AnotherSpeaker, {
init: function(options, elem){
this.options.soundFile = options.soundFile || this.options.soundFile;
Speaker.init.call(this, options, elem);
},
options:{
soundFile: 'abc.wav'
},
_playSound: function(){
//....code to play the sound this.options.soundFile;
},
speak: function(msg){
this._playSound();
Speaker.speak.call(this, msg);
}
});
$.plugin('AnotherSpeaker', AnotherSpeaker); //jquery plugin bridge
但是這種做法其實聽起來很「古典」給我。我通過Speaker.xxx.call
呼叫'超級'。我想我應該做差別繼承但是不知道怎麼做?任何幫助?
在JavaScript中模擬基於類的OOP以獲得重用效果並不理想。 Peter Michaux有一篇很好的文章[從Java類到JavaScript原型的過渡](http://michaux.ca/articles/transitioning-from-java-classes-to-javascript-prototypes),您可能會對此感興趣。 – RobG
謝謝。這是一篇很好的文章。但在我看來,它最終決定使用mixin而不是原型繼承(沒有原型鏈保留)。那麼我們什麼時候應該使用原型繼承? – jackysee
當你想創建一個對象的多個實例。我很少使用它們,大多數使用javascript幾年的人都會發現,模塊和類似模式在大多數情況下都是需要的。我認爲,因爲Web應用程序如此動態,保持簡單並重新編寫更新所需內容比保持複雜的繼承鏈和相互依賴關係更容易。通過片段重新使用似乎效果最好。 – RobG