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;有效,但它不会更新私有变量.我想同时更新私有变量和公共变量.这可能吗?
当您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)