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".
4

3 回答 3

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

这使用和的。它不会创建对变量的引用。实际上,是复制的。namesetNamename

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

于 2012-03-12T17:47:33.343 回答
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/

于 2012-03-12T17:45:57.507 回答
0

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

于 2015-11-15T17:45:01.230 回答