我创建了一个带有私有变量的类结构。代码如下:
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}
。有谁知道发生了什么?感谢。
答案 0 :(得分:6)
由于您的“课程”不是单身sinan()
,每次a.sss
等于1
时都会构建新实例。
您要做的只是创建一次实例并使用它:
var s = sinan();
console.log( s.get() );
s.set(2);
console.log( s.get() );
当然,如果你愿意,你也可以制作sinon
单身人士。例如,这是一个简单的实现,实例存储在closure中:
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()
每次都返回相同的对象。
答案 1 :(得分:1)
您的问题是,每次调用sinan()
时,都会创建一个新的sinan实例,因此它与以下内容相同:
var s1 = sinan();
s1.get(); // 1
var s2 = sinan() ;
s2.set(2); // 2
var s3 = sinan();
s3.get(); // 3
你应该这样做:
var s1 = sinan();
s1.get(); // 1
s1.set(2); // 2
s1.get(); // 2