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

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".
有帮助吗?

解决方案

return {
    fullName: name,
    set: setName
};

这使用了 价值观namesetName. 。它不会创建对该变量的引用。有效地, name 被复制。

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

其他提示

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/

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top