简体   繁体   English

在Revealing Module Pattern中公开私有变量

[英]Expose private variables in Revealing Module Pattern

I'm trying to implement the Revealing Module Pattern but I'm unable to expose a modified private property. 我正在尝试实现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".
return {
    fullName: name,
    set: setName
};

That uses the values of name and setName . 它使用namesetName It does not create a reference to the variable. 它不会创建对变量的引用。 Effectively, name is copied. 实际上, name被复制。

You need to create a corresponding getName method, to take advantage of closures so that you can keep a reference to a variable. 您需要创建一个相应的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/ http://jsfiddle.net/yeXMx/

If your value is an attribute in an object or array, you can export the object or array and the export will be by reference so outside users will see updated changes. 如果您的值是对象或数组中的属性,则可以导出对象或数组,并且导出将通过引用进行,因​​此外部用户将看到更新的更改。 It's a little risky since the generic pattern of exporting variables has the scalar/object copy/reference dichotomy. 由于导出变量的通用模式具有标量/对象复制/引用二分法,因此它有点风险。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM