Maison > interface Web > js tutoriel > Pouvez-vous utiliser `.apply()` avec l'opérateur `new` en JavaScript pour créer des objets avec des arguments variables ?

Pouvez-vous utiliser `.apply()` avec l'opérateur `new` en JavaScript pour créer des objets avec des arguments variables ?

Linda Hamilton
Libérer: 2024-12-11 14:15:11
original
708 Les gens l'ont consulté

Can You Use `.apply()` with the `new` Operator in JavaScript to Create Objects with Variable Arguments?

Nouveaux objets avec des arguments variables : démystifier .apply() et le « nouvel » opérateur

En JavaScript, la construction d'une instance d'objet à l'aide du « nouveau » opérateur est généralement fait en passant directement des arguments au constructeur. Cependant, il existe des scénarios dans lesquels on pourrait souhaiter fournir des arguments de manière dynamique. Cet article aborde la question de savoir s'il est possible d'utiliser '.apply()' avec l'opérateur 'new' pour y parvenir.

Limitations de .apply() avec 'new'

Malgré son polyvalence, la méthode '.apply()' ne peut pas être directement utilisée avec l'opérateur 'new'. Toute tentative en ce sens entraînera un comportement ou des erreurs inattendus.

Solutions alternatives

Reconnaissant la nécessité d'une telle fonctionnalité, diverses solutions innovantes ont été proposées par la communauté JavaScript.

Prototype de fonction

Une approche, attribuée à Matthew Crumley, utilise un prototype de fonction pour créer un solution de contournement :

var createSomething = (function() {
    function F(args) {
        return Something.apply(this, args);
    }
    F.prototype = Something.prototype;

    return function() {
        return new F(arguments);
    }
})();
Copier après la connexion

Cette solution crée efficacement une nouvelle fonction avec le comportement souhaité.

ECMAScript 5

'Function.prototype.bind' d'ECMAScript 5 offre une solution plus propre :

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

Cette méthode s'intègre parfaitement au « nouvel » opérateur et peut être appliquée à tous les types de constructeurs, y compris ceux ayant un comportement spécial comme « Date ».

Méthode Eval (Attention)

Bien que déconseillée en raison de problèmes de sécurité potentiels, la méthode « eval » fournit une autre solution de contournement :

var s = eval("new Something(" + [a, b, c] + ")");
Copier après la connexion

Comprendre les solutions

Ces solutions exploitent la méthode bind() pour créer une fonction qui accepte les arguments souhaités. Ensuite, l'opérateur 'new' est utilisé pour instancier un objet à partir de cette fonction.

Conclusion

La création d'objets avec des arguments variables à l'aide de '.apply()' et l'opérateur 'new' nécessite quelques ingéniosité. En tirant parti des fonctionnalités JavaScript disponibles, les développeurs peuvent mettre en œuvre ces techniques pour obtenir les fonctionnalités souhaitées.

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