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 ?

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

Patricia Arquette
Libérer: 2024-12-06 21:43:15
original
651 Les gens l'ont consulté

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

Invoquer la méthode .apply() avec le nouvel opérateur : est-ce faisable ?

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.

Solutions alternatives

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);
    }
})();
Copier après la connexion

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));
}
Copier après la connexion

Cette fonction peut être utilisée comme suit :

var s = newCall(Something, a, b, c);
Copier après la connexion

ou même directement :

var s = new (Function.prototype.bind.call(Something, null, a, b, c));
Copier après la connexion

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!

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