我正在尝试创建一个单例,其变量不能从外部直接变化。这是我目前的代码:
var singleton = new (function () {
var asd = 1;
this.__defineGetter__("Asd", function() {
return asd;
});
})();
alert(singleton.Asd) // test
然而,似乎很多丑陋的代码只是为了实现一个简单的事情。
使用此类私有变量创建单身的哪些更干净的替代方案?
答案 0 :(得分:3)
var theStaticClass = (function () {
var a = 7;
return { get A() { return a; } };
})();
console.log(theStaticClass.A);
答案 1 :(得分:2)
这是另一种(我不会说不那么丑陋)的方式,但现在TheStaticClass.A
更像是一个getter方法(优点是它也适用于IE):
var TheStaticClass = new (function() {
var a=1;
arguments.callee.prototype.A = function() {
return a;
};
})();
alert(TheStaticClass.A()) //=> 1
答案 2 :(得分:2)
假设您需要在返回之前对变量进行一些修改:
var theStaticClass = (function () {
var a = 7;
return {A: (function(b){
return b * b;
})(a)};
})();
console.log(theStaticClass.A); // => 49
答案 3 :(得分:1)
我认为只有封闭才能在JavaScript中带来真正的私有变量。通常我们使用某种命名约定来判断变量是否是私有的。
var TheStaticClass;
(function () {
var a=1;
TheStaticClass.__defineGetter__("A", function() {
return a;
});
})();
alert(TheStaticClass.A) // test