JavaScript模块模式:私有方法如何访问模块的范围?

Tho*_*mas 13 javascript module-pattern

实现模块模式时,私有函数如何访问模块的私有属性?我还没有看到任何开发人员这样做的例子.有什么理由不去吗?

var module = (function(){
    // private property
    var number = 0;

    // private method
    _privateIncrement = function(){
        // how do I access private properties here?
        number++;
    };

    // public api
    return {
        // OK
        getNumber: function(){
             return number;   
        },
        // OK
        incrNumber: function(){
             number++;  
        },
        // Doesn't work. _privateIncrement doesn't have
        // access to the module's scope.
        privateIncrNumber: function(){
            _privateIncrement();
        }
    };
})();
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 12

实现模块模式时,私有函数如何访问模块的私有属性?

属性在范围内,所以他们"只是做"

不行.

是的,它确实.

_privateIncrement 无法访问模块的范围.

是的,它确实.

查看以下实时示例:

var module = (function(){
    // private property
    var number = 0;

    // global method
    _privateIncrement = function(){
        number++;
    };

    // public api
    return {
        // OK
        getNumber: function(){
             return number;   
        },
        // OK
        incrNumber: function(){
             number++;  
        },
        // Does work!
        privateIncrNumber: function(){
            _privateIncrement();
        }
    };
})();

// Show default value
document.body.innerHTML += (module.getNumber());
// Increment
module.privateIncrNumber();
// Show new value
document.body.innerHTML += (module.getNumber());
// Increment (since _privateIncrement was defined as a global!)
_privateIncrement();
// Show new value
document.body.innerHTML += (module.getNumber());

// Output: 012
Run Code Online (Sandbox Code Playgroud)