用私有变量创建单例的方法
Ways to create a singleton with private variables?
我试图创建一个单例,有变量不直接从外部可变。这是我当前的代码:
var singleton = new (function () {
var asd = 1;
this.__defineGetter__("Asd", function() {
return asd;
});
})();
alert(singleton.Asd) // test
然而,似乎有很多丑陋的代码只是为了实现一个简单的事情。
用私有变量创建单例有什么更简洁的替代方法吗?var theStaticClass = (function () {
var a = 7;
return { get A() { return a; } };
})();
console.log(theStaticClass.A);
这是另一种(我不会说不难看)方式,但现在TheStaticClass.A
更像是一个getter方法(优点是它也可以在IE中工作):
var TheStaticClass = new (function() {
var a=1;
arguments.callee.prototype.A = function() {
return a;
};
})();
alert(TheStaticClass.A()) //=> 1
假设您需要在返回之前对变量做一些修改:
var theStaticClass = (function () {
var a = 7;
return {A: (function(b){
return b * b;
})(a)};
})();
console.log(theStaticClass.A); // => 49
我认为只有闭包才能给JavaScript带来真正的私有变量。通常我们使用某种命名约定来判断变量是否是私有的。
var TheStaticClass;
(function () {
var a=1;
TheStaticClass.__defineGetter__("A", function() {
return a;
});
})();
alert(TheStaticClass.A) // test
相关文章:
- 我该如何阻止单击方法多次工作
- 和兼容的单例骨干模型
- 有状态单例模块
- 在什么情况下我们需要在javsacript中实现单例类
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- 使用Ext.Ajax.request使ExtJS单例返回对象
- 原始值被称为单例的现象是什么?
- AngularJS 模式单例在服务中未更新视图
- ng-单击中方法的 if 语句
- 创建命名空间 Javascript 单例类的对象
- 流星.js单例确认框
- 如何通过指定的元素而不是 $(this) 调用 jquery 单击方法
- Javascript 单例模式
- 如何将 AMD 模块从单例转换为实例
- 为什么这个javascript单例方法有效
- 扩展现有单例
- 在javascript中还有其他实现单例模式的方法吗?
- 这种创建对象的方法是否只适用于单例对象?
- _.bindAll()用于JavaScript单例方法
- 用私有变量创建单例的方法