我有一些关于在javascript中创建单例的方法的阅读 – 简单的对象文字方式和另一种带有闭包技术的方法,如果我们想要使用私有变量.
我正在寻找创建一个实用功能,例如
Singleton(classname);
无论什么类 – “构造函数”我在这里作为参数传递,Singleton方法将此类转换为Singleton对象,在调用新的Classname()后PLUS如果有人再次触发新的classname()他/她得到一些新的错误(“已经实例化一次,这是Singleton“);
使用案例如下 –
function Circle() {this.name = "Circle";}
SingleTon(Circle);
var circle1 = new Circle(); // returns the circle instance
var circle2 = new Circle(); // throws Error "Already instantiated once,this is Singleton"
我只想在这里定义“Singleton”方法.
我已经看到类似的例子,其中getInstance方法用于获取实例,如Singleton.getInstance(Circle)等,但我正在寻找上面的特定问题,其他程序员习惯以“新”方式创建实例fire new Circle();第二次在他的代码中某处并收到错误.
以这种方式创建单例是一个问题,但主要问题是抛出“错误”,据我所知,Circle构造函数需要在Singleton函数中的某处修改,不知道如何实现这一点.
有什么解决方案吗?
提前致谢 !!
最佳答案
function Singleton(param){
var count = 0,old = window[param];
window[param] = function(){
if(++count <= 1) return old;
else alert('NO WAY!');
}
}
你会称之为:
Singleton('Circle');
演示:http://jsfiddle.net/maniator/7ZFmE/
请记住,仅当Circle或任何其他函数类位于全局窗口命名空间中时,此方法才有效.任何其他命名空间中的任何内容都需要更多操作才能使其完全正常工作.