javascript无法设置私有变量

Cha*_*ler 3 javascript class

我创建了一个类私有变量的类结构.代码如下:

var sinan = function(){
    var a = {ssss: 1};
    return {
        get: function(){
            return a;
        },
        set: function(s){
            a = {ssss: s}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我做

sinan().get(); // outputs {ssss: 1}
sinan().set(2); 
sinan().get(); // outputs {ssss: 1}
Run Code Online (Sandbox Code Playgroud)

它没有输出{ssss: 2}.有谁知道发生了什么?谢谢.

dfs*_*fsq 6

因为你的"类"不是单例sinan()构造每次a.sss都等于的新实例1.

你想要做的是只创建一个实例并使用它:

var s = sinan();
console.log( s.get() );
s.set(2); 
console.log( s.get() );
Run Code Online (Sandbox Code Playgroud)

当然,sinon如果你愿意,你也可以制作单身.例如,这是一个简单的实现,实例存储在闭包中:

var sinan = function () {

    var instance;

    return function () {
        if (!instance) {
            instance = function() {
                var a = {ssss: 1};
                return {
                    get: function () {
                        return a;
                    },
                    set: function (s) {
                        a.ssss = s
                    }
                }
            }();
        }
        return instance;
    };
}();
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下sinan() === sinan(),即sinan()每次都返回相同的对象.

演示:http://jsfiddle.net/r07wgyjt/

  • 用于指出单例函数的+1:http://jsfiddle.net/erbygoc7/ < - 具有符号函数的**你的**案例. (2认同)