- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我阅读了一些关于在 javascript 中创建单例的两种方法 - 简单的对象文字方法和另一种使用闭包技术的方法,如果我们想使用私有(private)变量的话。
例如,我希望创建一个效用函数
Singleton(classname);
无论我在此处作为参数传递的类 - “构造函数”,Singleton 方法都会将此类转换为 Singleton 对象,如果有人再次触发 new classname(),则在调用 new Classname()
后加上他/她收到一些 new Error ( "Already instantiated once, this is 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) 等,但我正在寻找上面的特定问题,另一个程序员习惯于创建"new"方式中的一个实例试图在他的代码中的某处第二次触发 new Circle();
并收到错误。
以这种方式创建单例是一个问题,但主要问题是抛出“错误”,据我所知,需要在 Singleton 函数的某处修改 Circle 构造函数,但不确定如何完成此操作。
有什么解决办法吗?
提前致谢!!
最佳答案
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
或任何其他函数类位于全局 window
命名空间中时才有效。任何其他命名空间中的任何内容都需要更多操作才能使其完全工作。
关于将类 "constructor function"转换为单例的 Javascript 实用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239272/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!