您的位置:首页 > Web前端 > JavaScript

JavaScript设计模式之Module(模块)模式

2015-11-28 16:39 639 查看
模块是任何请打应用程序架构中不可或缺 的一部分,它通常能够帮助我们清晰的分离组织项目中的代码单元。
在JavaScript中,通常用对象字面量表示法和Module模式来实现模式


1.对象字面量表示法

在对象字面量表示法中,一个对象被描述为一组包含在大括号中,以逗号分隔的键值对。对象内的名称可以是字符串或标识符,后面跟着一个冒号。对象中最后一个键值对的后面不用加逗号。

对象字面量是不需要使用new运算符进行实例化的,接下来我们用一个例子来描述对象字面量表示法定义的模块

var myModule = {
myProperty:"someValue",
myConfig:{
useCaching:true,
language:"en"
},
//基本方法
myMethod:function(){
console.log("myMethod");
},
//根据当前配置输出信息
myMethod2:function(){
console.log("Cacheing is:"+(this.myConfig.useCaching)?"enable":"disable");
},
myMethod3:function(newConfig){
if(typeof newConfig == "object"){
this.myConfig=newConfig;
console.log(this.myConfig.language);
}
}
};
myModule .myMethod();
myModule .myMethod1();
myModule .myMethod2();


2.Module(模块)模式

模块模式最初被定义为一种在传统软件工程中为类提供私有和工友封装的方法。在JavaScript中,Module模式用于进一步模拟类的概念,通过这种方法,能够使一个单独的对象拥有公有/私有方法和变量,从而屏蔽来自全局作用域的特殊部分,产生的结果是:函数名与在页面上其他脚本定义的函数冲突的可能性降低。

Module模式使用闭包封装私有状态和组织,它提供了一种包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域,并与别的开发人员的借口发生冲突。通过该模式,只需要返回一个公有API,从其他的一切则都在维持在持有闭包里。

var testModule = (function(){
var counter = 0;
return {
incrementCounter:function(){
return ++counter;
},
resetCounter:function(){
console.log("current counter is "+counter);
counter=0;
}
};
})();
//用法
//增加计算器
testModule.incrementCounter();
testModule.resetCounter();


在这里其他地方的代码无法访问到incrementCounter方法和resetCounter方法。counter变量完全与全局作用域隔离的。因此它表现得就像是一个私有变量。它的存在被局限于模块的闭包内。因此唯一能访问其作用域的代码就是这两个函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: