Le funzioni JavaScript possono accettare qualsiasi tipo di argomenti. Purtroppo il modo con cui JavaScript gestisce l'ordine degli argomenti non è molto rigorosa e questo può portare a risultati del tutto incoerenti. Una soluzione a questo problema consiste nell'uso di oggetti le cui proprietà fungeranno da argomenti. Questo approccio ha un enorme vantaggio: l'ordine degli argomenti non cambierà mai una volta fissati nel prototipo della funzione come proprietà dell'oggetto usato come unico argomento. L'unico accorgimento da prendere è quello di fornire dei valori predefiniti nel caso non fosse presente alcun argomento. Vediamo come fare.
Definiamo una prima funzione helper per visualizzare l'output nella console:
function Print(arg) {
console.log(arg);
}
Quindi creiamo la nostra funzione principale:
function Def(props){
var defaults = {
name: 'John Doe',
prop: 'Unknown'
};
props.name = props.name || defaults.name;
props.prop = props.prop || defaults.prop;
Print(props.name);
Print(props.prop);
}
Abbiamo usato due oggetti: props
è l'oggetto/argomento e defaults
contiene i valori predefiniti. Ecco un esempio dell'uso di questa funzione:
Def({name: 'Gabriele', prop: 'Developer'});
Def({prop: 'Developer', name: 'Gabriele'});
Def({});
E questo è il suo output:
Gabriele Developer Gabriele Developer John Doe Unknown
Come si può notare, cambiando l'ordine degli argomenti l'output è sempre lo stesso.