608 votes

JavaScript de nombre variable d’arguments pour fonctionner

Y a-t-il un moyen pour permettre à vars « illimité » pour une fonction en JavaScript ?

Exemple :

894voto

roufamatic Points 6773

Bien sûr, il suffit d’utiliser le `` objet.

120voto

Ken Points 23619

Une autre option est de passer dans vos arguments dans un objet de contexte.

et utilisez-le comme ceci

Cela a l’avantage que vous pouvez ajouter des arguments nommés autant que vous le souhaitez et la fonction peut utiliser (ou non) comme bon lui semble.

49voto

mbeasley Points 1686

Je suis d'accord avec Ken réponse comme étant la plus dynamique et j'aime faire un pas de plus. Si c'est une fonction que vous appelez plusieurs fois avec des arguments - je utiliser Ken le design, mais ensuite ajouter des valeurs par défaut:

function load(context) {

    var defaults = {
        parameter1: defaultValue1,
        parameter2: defaultValue2,
        ...
    };

    var context = extend(defaults, context);

    // do stuff
}

De cette façon, si vous avez beaucoup de paramètres, mais n'avez pas nécessairement besoin de les mettre à chaque appel de la fonction, vous pouvez simplement spécifier le non-valeurs par défaut. Pour étendre la méthode, vous pouvez utiliser jQuery étendre la méthode ($.extend()), de l'artisanat, de votre propre ou utilisez la commande suivante:

function extend() {
    for (var i = 1; i < arguments.length; i++)
        for (var key in arguments[i])
            if (arguments[i].hasOwnProperty(key))
                arguments[0][key] = arguments[i][key];
    return arguments[0];
}

Cela permettra de fusionner le contexte de l'objet avec les paramètres par défaut et compléter toutes les valeurs non définies dans votre objet avec les paramètres par défaut.

20voto

Canavar Points 29161

Oui, juste comme ça :

10voto

mcurland Points 61

Même si je suis généralement d'accord que les arguments nommés approche est utile et flexible (à moins que vous vous souciez de la commande, auquel cas arguments est plus facile), j'ai des inquiétudes concernant le coût de la mbeasley approche (à l'aide de valeurs par défaut et s'étend). C'est une quantité extrême de coût à prendre pour tirer les valeurs par défaut. Tout d'abord, les valeurs par défaut sont définies à l'intérieur de la fonction, de sorte qu'ils sont à nouveau remplies à chaque appel. Deuxièmement, vous pouvez facilement lire le nom des valeurs et de définir les valeurs par défaut dans le même temps à l'aide de ||. Il n'est pas nécessaire de créer et de fusion encore un autre nouvel objet pour obtenir cette information.

function load(context) {
   var parameter1 = context.parameter1 || defaultValue1,
       parameter2 = context.parameter2 || defaultValue2;

   // do stuff
}

C'est à peu près la même quantité de code (peut-être un peu plus), mais ce devrait être une fraction du coût d'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X