JavaScript模块模式-返回的对象===模块||facade
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?
这个实施有什么问题吗?有没有一种不同的、更有效的方法来做到这一点?
此外,在前面的代码块之后,如果我再次调用该函数并将返回的值指定给另一个变量:,会怎么样
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的一篇文章。
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 模块模式和这个
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 找不到模块捆绑包
- JavaScript命名约定;静态“;类或模块
- 显示模块模式在Knockout中设置模型的新实例
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- Javascript模块系统I'I’我正在努力,但搞不明白
- 如何捆绑循环相关模块
- 如何捆绑commonjs模块,除非指定需要
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- JavaScript模块模式-返回的对象===模块||facade