我编写了以下函数,允许从给定类创建单例类:
function SingletonFrom(Constructor) {
return function() {
var self = arguments.callee;
if (self._instance === undefined) {
switch (arguments.length) { // this is ugly
case 0: self._instance = new Constructor(); break;
case 1: self._instance = new Constructor(arguments[0]); break;
case 2: self._instance = new Constructor(arguments[0], arguments[1]); break;
// [...]
case 10: // ...
default: throw new Error('Error in Singleton: Constructor may take at most 10 arguments'); break;
}
}
return self._instance;
}
}
例子:
var Array_Singleton = new SingletonFrom(Array);
var x = new Array_Singleton(1,2,3); // [1,2,3]
var y = new Array_Singleton(0,0,0,0); // [1,2,3]
alert(x === y); // true
它工作得很好,但是我对这个switch
声明不太满意。问题是将可变数量的参数传递给使用“ new
”关键字调用的构造函数是不可能的。所以,我的 Constructor 函数不能接受超过 10 个参数。例如,这将失败:
new Array_Singleton(1,2,3,4,5,6,7,8,9,10,11);
有什么办法可以解决这个问题?