Algunos idiomas, como Ruby, Coffeescript y la próxima versión de JavaScript, pueden declarar parámetros predeterminados al definir una función, como esta:
La copia del código es la siguiente:
función myFunc (param1, param2 = "segunda cadena") {
console.log (param1, param2);
}
// salidas: "primera cadena" y "segunda cadena"
myFunc ("primera cadena");
// salidas: "Primera cadena" y "Second String versión 2"
myFunc ("Primera cadena", "Second String versión 2");
Desafortunadamente, en la versión actual de JavaScript, este escrito no es válido. Entonces, ¿qué podemos hacer para implementar de esta manera, utilizando nuestro conjunto de herramientas existente?
La solución más fácil es como esta:
La copia del código es la siguiente:
función myFunc (param1, param2) {
if (param2 === Undefined) {
param2 = "segunda cadena";
}
console.log (param1, param2);
}
// salidas: "Primera cadena" y "Second String versión 2"
myFunc ("Primera cadena", "Second String versión 2");
El hecho es que un parámetro omitido siempre está "indefinido" cuando se accede. Si solo tiene un parámetro, esta es una buena solución, ¿qué pasaría si hubiera múltiples en ese momento?
Si tiene más de un parámetro, puede usar un objeto como parámetro, que tiene la ventaja de que cada parámetro tiene un nombre claro. Si pasa un parámetro de objeto, puede declarar el valor predeterminado de la misma manera.
La copia del código es la siguiente:
función myFunc (paramObject) {
var defaultParams = {
Param1: "Primera cadena",
param2: "segunda cadena",
Param3: "Tercera cadena"
};
var finalParams = defaultParams;
// iteramos sobre cada propiedad del paramObject
for (clave var en paramObject) {
// Si la propiedad actual no fue heredada, procedió
if (paramObject.hasownproperty (key)) {
// Si se define la propiedad actual,
// Agregarlo a FinalParams
if (paramObject [key]! == Undefined) {
finalParams [key] = paramObject [key];
}
}
}
console.log (finalParams.Param1,
FinalParams.Param2,
finalParams.Param3);
}
myFunc ({param1: "mi propia cadena"});
Esto es un poco torpe. Si usa mucho este método, puede escribir una función de encapsulación. Afortunadamente, muchas bibliotecas ahora tienen métodos relacionados, como el método de extensión en jQuery y subrayado.
A continuación se utiliza el método de extensión de bajo para lograr el mismo resultado anterior:
La copia del código es la siguiente:
función myFunc (paramObject) {
var defaultParams = {
Param1: "Primera cadena",
param2: "segunda cadena",
Param3: "Tercera cadena"
};
var finalParams = _.extend (defaultParams, paramObject);
console.log (finalParams.Param1,
FinalParams.Param2,
finalParams.Param3);
}
// salidas:
// "mi propia cadena" y "segunda cadena" y "tercera cadena"
myFunc ({param1: "mi propia cadena"});
Así es como puede obtener los parámetros predeterminados en la versión actual de JavaScript.
La crítica y la corrección de aspectos inapropiados en el artículo son bienvenidos.