![](/img/trans.png)
[英]Understanding the benefit of naming a returned object in the module pattern in 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
};
});
看看AMD和CommonJS模塊 ,或Addy Osmani的文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.