Maison > interface Web > js tutoriel > « .apply() » peut-il être utilisé avec l'opérateur « new » pour créer des objets JavaScript ?

« .apply() » peut-il être utilisé avec l'opérateur « new » pour créer des objets JavaScript ?

Mary-Kate Olsen
Libérer: 2024-12-07 21:15:14
original
797 Les gens l'ont consulté

Can `.apply()` be Used with the `new` Operator to Create JavaScript Objects?

Élargissement des capacités de .apply() avec le « nouvel » opérateur

En JavaScript, la méthode .apply() permet une fonction à appeler avec un contexte d'objet spécifié et des arguments passés sous forme de tableau. Cependant, la question se pose : .apply() peut-il être utilisé conjointement avec l'opérateur 'new' pour créer une instance d'objet ?

L'extrait de code initial que vous avez fourni a tenté de le faire, mais malheureusement, cette approche est non pris en charge nativement en JavaScript.

Cependant, plusieurs solutions intelligentes ont été proposées pour surmonter cette limitation. Une approche particulièrement élégante consiste à utiliser Function.prototype.bind dans ECMAScript5 :

function newCall(Cls) {
    return new (Function.prototype.bind.apply(Cls, arguments));
}
Copier après la connexion

Cette fonction accepte une classe ou un constructeur comme premier argument, ainsi que tous les arguments supplémentaires qui doivent être transmis au constructeur. Il utilise ensuite Function.prototype.bind pour créer une nouvelle fonction qui a le même contexte que le constructeur et les arguments supplémentaires pré-liés. Enfin, le mot-clé 'new' est utilisé pour créer une nouvelle instance d'objet basée sur cette fonction liée.

Une autre solution possible consiste à utiliser la fonction eval() :

function evalConstructor(str, args) {
    return eval('new (' + str + ')(' + args + ')');
}
Copier après la connexion

Cette fonction prend une expression de chaîne représentant le constructeur et un tableau d'arguments, puis évalue cette chaîne en tant qu'expression JavaScript. Le code résultant est essentiellement le même que l'utilisation directe de l'opérateur new, mais il vous permet de transmettre un nombre variable d'arguments.

Ces solutions offrent des moyens pratiques de créer des instances d'objet avec un nombre variable d'arguments, améliorant ainsi la fonctionnalité du mécanisme de constructeur de JavaScript.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal