En JavaScript, je veux créer une instance d'objet (via l' new
opérateur), mais transmettre un nombre arbitraire d'arguments du constructeur. Est-ce possible?
Ce que je veux faire, c'est quelque chose comme ceci (mais le code ci-dessous ne fonctionne pas):
function Something(){
// init stuff
}
function createSomething(){
return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); // 's' is an instance of Something
La Réponse
À partir des réponses ici, il est devenu clair qu'il n'y a pas intégré de manière à appeler .apply()
avec l' new
de l'opérateur. Cependant, les gens ont suggéré un certain nombre de vraiment intéressant de solutions à ce problème.
Ma solution préférée était celle de Matthieu Crumley (je l'ai modifié pour passer l' arguments
de la propriété):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();