Certaines langues - telles que Ruby, CoffeeScript et la prochaine version JavaScript - peuvent déclarer les paramètres par défaut lors de la définition d'une fonction, comme ceci:
La copie de code est la suivante:
fonction myfunc (param1, param2 = "deuxième chaîne") {
console.log (param1, param2);
}
// sorties: "première chaîne" et "deuxième chaîne"
myfunc ("première chaîne");
// Sorties: "First String" et "Second String version 2"
myFunc ("First String", "Second String version 2");
Malheureusement, dans la version JavaScript actuelle, cette écriture n'est pas valide. Alors, que pouvons-nous faire pour implémenter de cette façon, en utilisant notre ensemble d'outils existant?
La solution la plus simple est comme ceci:
La copie de code est la suivante:
fonction myfunc (param1, param2) {
if (param2 === Undefined) {
param2 = "deuxième chaîne";
}
console.log (param1, param2);
}
// Sorties: "First String" et "Second String version 2"
myFunc ("First String", "Second String version 2");
Le fait est qu'un paramètre omis est toujours "non défini" lorsqu'il est accessible. Si vous n'avez qu'un seul paramètre, c'est une bonne solution, que se passe-t-il s'il y en avait plusieurs à ce moment-là?
Si vous avez plus d'un paramètre, vous pouvez utiliser un objet comme paramètre, qui a l'avantage que chaque paramètre a une dénomination claire. Si vous passez un paramètre d'objet, vous pouvez déclarer la valeur par défaut de la même manière.
La copie de code est la suivante:
fonction myfunc (paramobject) {
var defaultParams = {
param1: "première chaîne",
param2: "deuxième chaîne",
param3: "troisième chaîne"
};
var finalParams = defaultParams;
// nous itérons sur chaque propriété du paramobject
pour (clé var dans paramobject) {
// Si la propriété actuelle n'était pas héritée, procédure
if (paramobject.hasownproperty (key)) {
// Si la propriété actuelle est définie,
// l'ajouter à FinalParams
if (paramObject [key]! == Undefined) {
finalParams [key] = paramobject [key];
}
}
}
console.log (finalParams.param1,
finalparams.param2,
finalParams.param3);
}
myfunc ({param1: "ma propre chaîne"});
C'est un peu maladroit. Si vous utilisez beaucoup cette méthode, vous pouvez écrire une fonction d'encapsulation. Heureusement, de nombreuses bibliothèques ont désormais des méthodes connexes, telles que la méthode Extende dans JQuery et Soulignement.
Ce qui suit utilise la méthode d'étendue de soulignement pour obtenir le même résultat ci-dessus:
La copie de code est la suivante:
fonction myfunc (paramobject) {
var defaultParams = {
param1: "première chaîne",
param2: "deuxième chaîne",
param3: "troisième chaîne"
};
var finalParams = _.Extend (defaultParams, paramObject);
console.log (finalParams.param1,
finalparams.param2,
finalParams.param3);
}
// Sorties:
// "My Own String" et "Second String" et "Third String"
myfunc ({param1: "ma propre chaîne"});
C'est ainsi que vous pouvez obtenir les paramètres par défaut dans la version JavaScript actuelle.
La critique et la correction des aspects inappropriés de l'article sont les bienvenus.