我创建了一个带有私有(private)变量的类结构。代码如下:

var sinan = function(){
    var a = {ssss: 1};
    return {
        get: function(){
            return a;
        },
        set: function(s){
            a = {ssss: s}
        }
    }
}

当我做
sinan().get(); // outputs {ssss: 1}
sinan().set(2);
sinan().get(); // outputs {ssss: 1}

它没有输出{ssss: 2}。有人知道发生了什么吗?谢谢。

最佳答案

由于您的“类”不是单例的,因此sinan()每次都会构造一个新实例,a.sss等于1

您要做的是只创建一次实例并使用它:

var s = sinan();
console.log( s.get() );
s.set(2);
console.log( s.get() );

当然,您也可以根据需要使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;
    };
}();

因此在这种情况下sinan() === sinan(),即sinan()每次都返回相同的对象。

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

09-25 19:30