Javascript 公共(public)/私有(private)变量

标签 javascript variables scope private public

我有一个包含公共(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)变量。这可能吗?

JsFiddle showing problem

最佳答案

当您在要返回的对象中设置 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/

相关文章:

javascript - MinMax 算法未按预期工作

java - Java(android) 如何在另一个方法中使用一个方法的变量

jsf-2 - 使用 setPropertyActionListener 查看作用域托管 bean

php - Laravel 模型范围 activated_at 和 deactivated_at 检查是否有 7 天的差异

javascript - Tempdata 未显示在 View ASP.NET C# 中的图像 src 中

javascript - jQuery fadeToggle 缓存/本地存储

javascript - 优化 colorbox 并添加额外的 jquery

C# 说我在不打算声明变量的时候声明了变量

arrays - BASH:将 $1 评估为字符串以调用数组长度

javascript - 如何在 JavaScript 助手中只声明一次变量?