Idéalement, vous refactoriser à passer un objet et de le fusionner avec un objet par défaut, l'ordre dans lequel les arguments sont passés n'a pas d'importance (voir ci-dessous).
Si, toutefois, vous voulez quelque chose de rapide, fiable, facile à utiliser et peu encombrant, essayez ceci:
Un nettoyage rapide fix pour n'importe quel nombre d'arguments par défaut
- Il évolue avec élégance: un minimum de code supplémentaire pour chaque nouvelle valeur par défaut
- Vous pouvez coller n'importe où: il suffit de changer le nombre de arguments et les variables
- Si vous souhaitez passer
undefined
à un argument avec une valeur par défaut, de cette façon, la variable est définie comme undefined
. La plupart des autres options de cette page remplacerait undefined
avec la valeur par défaut.
Voici un exemple pour fournir des valeurs par défaut pour les trois arguments optionnels (avec deux arguments requis)
function myFunc(reqOne,reqTwo, optOne,optTwo,optThree) {
switch (arguments.length - 2) { // <-- 2 is number of required arguments
case 0: optOne = 'Some default';
case 1: optTwo = 'Another default';
case 2: optThree = 'Some other default';
}
}
(intentionnellement pas de rupture entre les cas: chaque cas implique la prochaine cas est également vrai)
Ceci est similaire à roenving réponse, mais facilement extensible pour un nombre quelconque d'arguments par défaut, plus facile à mettre à jour, et à l'aide de arguments
pas Function.arguments
.
De passage et de fusion d'objets pour plus de flexibilité
Le code ci-dessus, à l'instar de beaucoup de manières de faire des arguments par défaut, ne peut pas se passer des arguments en dehors de la séquence, par exemple, en passant optThree
mais en laissant de l' optTwo
pour revenir à sa valeur par défaut.
Une bonne option consiste à passer des objets et de les fusionner avec un objet par défaut. C'est aussi bon pour la maintenabilité.
Exemple d'utilisation de jQuery (que vous pouvez à la place utiliser le trait de Soulignement de l' _.defaults(object, defaults)
ou parcourir les options):
function myFunc( args ) {
var defaults = {
optOne: 'Some default',
optTwo: 'Another default',
optThree: 'Some other default'
};
args = $.extend({}, defaults, args);
console.log(args.optOne, args.optTwo, args.optThree);
}
// example using it
myFunc({
optOne: "We'll override optOne and optThree...",
optThree: "...leaving optTwo to use its default."
});