Javascript公共/私人变量

Mic*_*ael 3 javascript variables scope private public

我有一个包含公共和私有变量的对象.公共变量被分配给私有变量(我认为),但是,每当我使用函数修改私有变量时,公共变量都不会更新.

var foo = (function() {
    //Private vars
    var a = 1;

    return {
        //Public vars/methods
        a: a,
        changeVar: function () {
            a = 2;
        }
    }
})();
alert(foo.a);  //result: 1
foo.changeVar();
alert(foo.a);  //result: 1, I want it to be 2 though
Run Code Online (Sandbox Code Playgroud)

现在我知道如果我将changeVar中的行更改为this.a = 2;有效,但它不会更新私有变量.我想同时更新私有变量和公共变量.这可能吗?

JsFiddle显示问题

ano*_*ard 8

当您a在要返回的对象中设置键时,它会复制 "私有" a变量.

您可以使用getter函数:

return {
    //Public vars/methods
    a: function() { return a; },
    changeVar: function () {
        a = 2;
    }
};
Run Code Online (Sandbox Code Playgroud)

或者您可以使用Javascript的内置访问器功能:

obj = {
    //Public vars/methods
    changeVar: function () {
        a = 2;
    }
};
Object.defineProperty(obj, "a", { get: function() { return a; } });
return obj;
Run Code Online (Sandbox Code Playgroud)