• 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;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • 通过以上的代码可以看出,要修改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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

通过上面的例子,应该对私有变量、公有变量和公有变量调用似有变量和私有属性有所了解了吧.

Last Updated: 2021/11/28 00:58:10
Contributors: biubu