在Revealing Module Pattern中公开私有变量

时间:2012-03-12 17:43:54

标签: javascript design-patterns revealing-module-pattern

我正在尝试实现Revealing Module Pattern,但我无法公开修改过的私有属性。

var myRevealingModule = (function(){

    var name = 'Diogo';

    function setName () {
       name = name + ' Cardoso';
    }

    return {
        fullName: name,
        set: setName
    };

}());

// Sample usage:
myRevealingModule.set();
console.log(myRevealingModule.fullName); // "Diogo" instead of the excepted "Diogo Cardoso".

3 个答案:

答案 0 :(得分:21)

return {
    fullName: name,
    set: setName
};

使用namesetName。它不会创建对变量的引用。实际上,name被复制。

您需要创建相应的getName方法,以利用闭包,以便您可以保留对变量的引用。

答案 1 :(得分:13)

var myRevealingModule = (function(){

    var name = 'Diogo';

    function setName () {
       name = name + ' Cardoso';
    };

    function getName () {
       return name;
    };

    return {
        fullName: name,
        set: setName,
        get: getName
    };

}());

http://jsfiddle.net/yeXMx/

答案 2 :(得分:0)

如果您的值是对象或数组中的属性,则可以导出对象或数组,并且导出将通过引用进行,因​​此外部用户将看到更新的更改。由于导出变量的通用模式具有标量/对象复制/引用二分法,因此风险很小。