揭示模块模式中如何暴露私有变量

12

我正在尝试实现揭示模块模式,但我无法暴露已修改的私有属性。

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个回答

24
return {
    fullName: name,
    set: setName
};

这使用了namesetName。它并未创建对该变量的引用。实际上,name被复制了。

你需要创建一个对应的getName方法,利用闭包来保留对变量的引用。


16
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/



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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接