je l'ai écrit la fonction suivante qui permet la création de classes singleton de cours donnés:Création d'un singleton de toute classe donnée en javascript
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;
}
}
Exemple:
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
Il fonctionne très bien, mais je Je ne suis pas très content de l'instruction switch
. Le problème est de passer un nombre variable d'arguments à un constructeur appelé avec le mot-clé "new
" n'est pas possible. Donc, ma fonction Constructeur ne doit pas prendre plus de 10 arguments. Par exemple, cela échouera:
new Array_Singleton(1,2,3,4,5,6,7,8,9,10,11);
Un moyen de contourner ce problème?
x == y résultant vrai?Pourquoi voudriez-vous que dans votre exemple ci-dessus ?? Cela me semble extrêmement dangereux. – Juri
Dans certaines situations, cela pourrait être utile. Premier arrivé, premier servi ... Dans mon projet actuel, mes constructeurs Obj_Singleton sont tous appelés avec les mêmes arguments de toute façon, ce qui rend les choses plus faciles. Naturellement, vous pouvez modifier la méthode pour signaler une erreur si une instance existe. – user123444555621