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
Patricia Arquetteoriginal
2024-12-06 21:43:15652parcourir

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);
    }
})();

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!

Déclaration:
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