Maison >interface Web >js tutoriel >Pouvez-vous utiliser l'opérateur « new » avec « .apply() » en JavaScript pour créer des objets avec des arguments variables ?
En JavaScript, il peut être souhaitable de créer une instance d'objet à l'aide de l'opérateur new tout en passant un nombre variable d'arguments au constructeur. Cependant, cela n'est pas réalisable en utilisant l'extrait de code que vous avez fourni.
1. Approche de Matthew Crumley :
Cette solution implique la création d'une nouvelle fonction, F, qui étend le prototype Something et fournit un wrapper pour la méthode apply(). Il peut être mis en œuvre de la manière suivante :
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. Solution ECMAScript 5 :
Avec ECMAScript 5, la méthode Function.prototype.bind peut être utilisée pour une solution plus concise :
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
Cette fonction peut être utilisée comme suit :
var s = newCall(Something, a, b, c);
ou même directement :
var s = new (Function.prototype.bind.call(Something, null, a, b, c));
Explication :
La méthode bind nous permet de créer une nouvelle fonction qui a le même contexte (cette valeur) que la fonction d'origine mais prend un nombre limité d'arguments. En utilisant la méthode apply(), nous pouvons transmettre un nombre variable d'arguments à la fonction liée. Enfin, l'opérateur new peut être appliqué à la fonction liée pour créer une nouvelle instance d'objet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!