gpt4 book ai didi

将类 "constructor function"转换为单例的 Javascript 实用函数

转载 作者:搜寻专家 更新时间:2023-11-01 04:18:59 24 4
gpt4 key购买 nike

我阅读了一些关于在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com