我创建了一个带有私有(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/