我在这里有点困惑。遵循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);
这是否意味着我现在拥有该功能的第二个外观,或者它是一个新功能?
干杯!
答案 0 :(得分:1)
该函数是模块的构造函数,因此每次调用该函数时,都会创建一个新的单独模块实例并将其分配给接收变量。
此实现没有任何问题(实际上它非常常见),您可以在程序中的任何位置使用它来获取该模块的新实例。
最佳。
答案 1 :(得分:0)
模块模式类似于其他语言中的命名空间,用于防止全局变量污染和封装方法。
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
};
});