我有一个包含公共(public)变量和私有(private)变量的对象。公共(public)变量被分配给私有(private)变量(我认为),但是,每当我用函数修改私有(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
现在我知道,如果我将 changeVar 中的行更改为 this.a = 2;
它可以工作,但不会更新私有(private)变量。我想同时更新私有(private)变量和公共(public)变量。这可能吗?
最佳答案
当您在要返回的对象中设置 a
键时,即创建了“私有(private)”a
变量的副本。
您可以使用 getter 函数:
return {
//Public vars/methods
a: function() { return a; },
changeVar: function () {
a = 2;
}
};
或者您可以使用 Javascript 的内置访问器功能:
obj = {
//Public vars/methods
changeVar: function () {
a = 2;
}
};
Object.defineProperty(obj, "a", { get: function() { return a; } });
return obj;
关于Javascript 公共(public)/私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694840/