簡體   English   中英

Javascript:模塊模式與構造函數/原型模式?

[英]Javascript: Module Pattern vs Constructor/Prototype pattern?

我想知道模塊模式或Constructor / protoType模式是否更適用於我的工作。

基本上我使用的是不引人注目的javascript - HTML文檔引用了.js文件。

我對模塊模式的理解:

  • 調用INIT方法(基本上是一個我可以使用模塊模式創建和返回的公共方法)
  • 在INIT方法中,分配所有點擊事件等。

這聽起來像是我情況的完美模式,因為我不需要創建對象和繼承層次結構等。

我對構造函數/原型模式的理解:

  • 用於創建對象
  • 用於繼承(即超類型的子類型)

我是否正確,為了提供不引人注目的javascript,模塊模式是理想的?

構造函數和原型是實現類和實例的合理方法之一。 它們與該模型並不完全對應,因此您通常需要選擇特定的方案或輔助方法來實現原型方面的類。 關於JS中類的一些背景知識 。)

模塊模式通常用於命名空間,您可以在其中使用單個實例作為存儲來對相關的函數和對象進行分組。 這與原型設計有利的用例不同。 他們並沒有真正相互競爭; 你可以非常高興地將兩者結合使用(例如,在模塊中放置構造函數並說出new MyNamespace.MyModule.MyClass(arguments) )。

模塊模式比原型更容易,更優雅。 但是,首先考慮移動。 它不是中/大對象的相關模式,因為初始化需要在開始之前解析整個塊。 多個閉包還創建了垃圾收集器不會釋放的循環依賴(特別是IE),它導致更大的內存占用空間,直到窗口(或選項卡)關閉時才釋放 - 檢查chrome任務管理器進行比較 - 加載時間是反向的使用模塊模式與對象大小成比例,而原型繼承不是這種情況。 上述聲明通過多個基准驗證,例如: http//jsperf.com/prototypal-performance/54

如上次測試所示。 最好將小對象初始化為普通對象(沒有這些模式)。 它適用於不需要封閉或繼承的單個對象。 評估您是否需要這些模式是明智的。

您可以嘗試折疊模式,這是一個鏈接: Javascript折疊模式

我還給出了一個類似問題的答案,其中顯示了如何使用折疊模式:

折疊模式的簡單示例

原型模式有助於我們擴展功能,並且無論對象的數量如何,內存中只有一個函數實例。 在Module模式中,每個對象在內存中創建一個新的函數實例,但它提供了私有/公共變量的概念,並有助於封裝變量和函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM