javascript无法设置私有变量
我创建了一个带有私有变量的类结构。代码如下:javascript无法设置私有变量,javascript,class,Javascript,Class,我创建了一个带有私有变量的类结构。代码如下: var sinan = function(){ var a = {ssss: 1}; return { get: function(){ return a; }, set: function(s){ a = {ssss: s} } } } 当我这样做的时候 sinan().get(); // outputs
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
singleton。例如,下面是一个实例存储在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()
每次都返回相同的对象
演示:您的问题是,每次调用
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
sinan()。也许您想要一个静态类+1用于指出单例函数:很好。如果您将所有函数详细信息放在return之外,并在return中使用函数名初始化实例,则会更好。类似这样的东西。==>知道了!谢谢你解释单身汉的案子。