Javascript 设计模式 -- Module(模块)模式
2018-04-14 本文已影响1人
WestLonely
-
1 . 公有方法改变私有变量 :
- Module 模式使用闭包封装"私有" 状态和组织.它提供了一中包装混合公有/私有方法和变量的方式,防止其泄露到全局作用域,防止与别的开发人员的接口发生冲突,通过该模式,只需返回一个公有API,而其他的一切则都维持在私有闭包里.我们来看一段代码:
var testModule = (function () {
var count = 0; // 私有变量
return { // 返回一个对象
incrementCount: function () { // 公有方法
return ++count;
},
reserCount: function () { // 公有方法
console.log ( "重置前 count 的值为 : " + count ); // 输出内容为 : 重置前 count 的值为 : 1
count = 0;
}
};
})();
testModule.incrementCount (); // 公有 API 调用, 执行 ++count;
testModule.reserCount (); // 公有 API 调用, 执行 count = 0;
- 通过以上的代码可以看出,要修改count的值,除了上述两个公有方法外,别无他法.这就是模块化的好处,count 变量是完全与全局作用域隔离的,因此他表现的就像是一个似有变量,既不会污染全局变量,又不会与其他的变量冲突.
-
2 . 调用私有变量和方法的公有函数
var myNameSpace = (function () {
var myPrivateVar = 0;
var myPrivateMethod = function ( params ) {
console.log ( params ); // 公有方法(myPublicMethod)调用私有方法(myPrivateMethod);执行公有方法,改变后的私有变量值为 1
};
return {
myPublicVar: 'params',
myPublicMethod: function ( bar ) {
myPrivateVar++;
myPrivateMethod ( '公有方法(myPublicMethod)调用私有方法(myPrivateMethod);' + bar + ', 累加后的私有变量值为 ' + myPrivateVar );
}
};
}) ();
myNameSpace.myPublicMethod ( '执行公有方法' ); // 公有方法(myPublicMethod)调用私有方法(myPrivateMethod);执行公有方法, 累加后的私有变量值为 1
console.log ( '公有变量(myNameSpace.myPublicVar)为 : ' + myNameSpace.myPublicVar ); //公有变量(myNameSpace.myPublicVar)为 : params
console.log ('访问私有变量结果为 : ' + myNameSpace.myPrivateVar ); // 访问私有变量结果为 : undefined
通过上面的例子,应该对私有变量、公有变量和公有变量调用似有变量和私有属性有所了解了吧.