我创建了一个类私有变量的类结构.代码如下:
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}.有谁知道发生了什么?谢谢.
因为你的"类"不是单例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/