天天看點

《JavaScript設計模式》——9.3 Revealing Module(揭示子產品)模式

本節書摘來自異步社群《javascript設計模式》一書中的第9章,第9.3節, 作者: 【美】addy osmani 譯者: 徐濤 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

現在對module模式應該更加熟悉了,讓我們來看一個稍有改進的版本—christian heilmann的revealing module模式。

revealing module模式的産生是因為heilmann很不滿意這種狀況:當他想從另一個方法調用一個公有方法或通路公有變量時,必須要重複主對象的名稱。他也不喜歡使用module模式時,必須要切換到對象字面量表示法來讓某種方法變成公有方法。

他努力的結果就是建立了一個更新的模式,能夠在私有範圍内簡單定義所有的函數和變量,并傳回一個匿名對象,它擁有指向私有函數的指針,該函數是他希望展示為公有的方法。

有關如何使用revealing module模式的示例如下所示:

如果你喜歡,該模式也可以用于展示擁有更具體命名方案的私有函數和屬性:

9.3.1 優點

該模式可以使腳本文法更加一緻。在子產品代碼底部,它也會很容易指出哪些函數和變量可以被公開通路,進而改善可讀性。

9.3.2 缺點

該模式的一個缺點是:如果一個私有函數引用一個公有函數,在需要打更新檔時,公有函數是不能被覆寫的。這是因為私有函數将繼續引用私有實作,該模式并不适用于公有成員,隻适用于函數。

引用私有變量的公有對象成員也遵守無更新檔規則。

正因為如此,采用revealing module模式建立的子產品可能比那些采用原始module模式建立的子產品更加脆弱,是以在使用時應該特别小心。

繼續閱讀