JavaScript學習筆記(三十) 代碼複用模式

代碼複用模式(Code Reuse Patterns)

代碼複用是一個重要而且有趣的話題,因爲應該儘量少寫代碼而儘可能的複用現有的代碼——你或者其他人已經寫好的代碼。尤其是好的,測試過的,可維護的,可擴展的並且有文檔的代碼。

當談論代碼複用的時候,心中想的的第一件是就是繼承(inheritance),接下來有很多內容專注於這個主題。你將會看到一些方法去實現經典(Classical)繼承和非經典(nonclassical)繼承。
但我們要在心中記住最終目標是很重要的:我們想複用代碼。繼承對我們來說是一種可以實現這個目標辦法,但它不是唯一的方法。你將會看到如何使用其它對象組合一個對象,如何將對象混合在一起,如何僅僅借用和複用你需要的函數,而且永遠不會繼承任何東西。

當我們解決代碼複用任務時,在心中記住四人幫的書中爲對象創建提出的意見:優先使用組合而不是繼承(Prefer object composition to class inheritance)

經典VS現代繼承模式(Classical Versus Modern Inheritance Patterns)

你常常聽到術語“經典繼承(classical inheritance)”在關於JavaScript繼承的主題的討論中,那麼讓我們首先解釋一下經典(classical inheritance)的意思。
這個詞語的重點是"類"(class)。

大多數編程語言都有類的概念作爲對象的原型。在這些語言中,每一個對象都是一個類的實例(比如,在Java中)並且一個對象不可能被創建如果它的類不存在。
在JavaScript中,沒有類,類的實例這種概念沒有任何意義。對象在JavaScript中對象就是簡單的鍵-值對,你可以在創建之後立馬改變它們。

但是JavaScript有構造函數(constructor functions),並且new操作符的語法和很多使用類的語法類似。
在Java中你可以像下面這樣:
Person adam = new Person();
在JavaScript中你可以這樣:
var adam = new Person();
不同的之處,Java是強類型的並且你需要聲明adam是Person類型,語法看起來一模一樣。
JavaScript的構造函數調用看起來好像Person就是一個類,但在心中記住Person仍然僅僅是一個函數是很重要的。
這個在語法上的相似性已經讓很多程序猿從類的角度來思考JavaScript,發展思維,並且繼承假定有類的模式。這些實現我們叫它"經典繼承"(classical)。
我們說的"現代繼承"(modern)是其它模式,那些不需要你考慮類(class)的模式。

當開始爲你的項目採用繼承模式時,你有很多選擇。你應該始終優先採用現代模式,除非團隊在沒有類參與的話真的不舒服。

後面我們會討論先討論經典模式然後到現代模式。


-------------------------------------------------------------------------------------------------------------------------------



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章