簡體   English   中英

JavaScript模塊模式-返回的對象===模塊|| 正面

[英]JavaScript module pattern - returned object === module || facade

我在這里有些困惑。 遵循JS中的模塊模式,模塊通常是立即執行的匿名函數的返回對象。 但是,如果我不想執行該函數,而是在需要例如window.onload時調用它,該怎么辦?

var module = function (args) {
    //private members

    return {
         //public members
    };
};

var module_instance = module (args);   // module instance or facade instance?

此實現有任何問題嗎? 有另一種更有效的方法嗎?

另外,在previos代碼塊之后,如果再次調用該函數並將返回的值賦給另一個變量該怎么辦:

var module_instance2 = module (args);

這是否意味着我現在具有該函數的第二個外觀,或者完全是一個新函數?

干杯!

該函數是模塊的構造函數,因此,每次調用該函數時,都會創建該模塊的新的單獨實例並將其分配給接收變量。

此實現沒有任何問題(實際上很常見),您可以在程序中的任何位置使用它來獲取該模塊的新實例。

最好。

模塊模式與其他語言中的名稱空間相似,用於防止全局變量污染並用作封裝方法。

window.module1 = (function() {} {
  var version = "0.0.1";
  function func1 () {};
  function func2 () {};

  return = {
    version: version,
    func1: func1,
    func2: func2,
  };
})()

您可以具有一個函數DeclareModule() ,該函數在窗口對象上定義一個模塊。

var DeclareModule = function(name, content) {
  if (typeof content === 'object') {
    window[name] = content;
  } else if (typeof content === 'function') {
    window[name] = content();
  }
};

//Declared by object
DeclareModule("module1", {
  version: "0.0.1",
  func1: function () {},
  func2: function () {}
});

//Declared by function
DeclareModule("module1", function () {
  var version = "0.0.1";
  function func1 () {};
  function func2 () {};

  return {
    version: version,
    func1: func1,
    func2: func2
  };
});

看看AMDCommonJS模塊 ,或Addy Osmani文章

暫無
暫無

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

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