L'ordine dei parametri dei costruttori in JavaScript e jQuery: una soluzione

L'ordine dei parametri dei costruttori in JavaScript e jQuery: una soluzione

I manuali JavaScript canonici presentano i costruttori di oggetti senza specificare l'importanza dei parametri passati ai costruttori. In particolare non dicono quasi mai che la forma tradizionale è suscettibile di errori.

Questa è la forma tradizionale, con una sequenza di parametri:


var MY = function(one, two, three) {

	this.one = one || null;
	this.two = two || null;
	this.three = three || null;
	
	this.init = function() {
	
		console.log(this.one + ' ' + this.two + ' ' + this.three);	
	
	};
	
	return this.init();

};

Va tutto bene finché si rispetta esattamente l'ordine della sequenza. Ma cosa accade se si invertono i parametri? Accade che le proprietà dell'oggetto avranno valori errati. Possiamo rimediare utilizzando invece un oggetto per memorizzare i parametri. In questo modo l'ordine della sequenza non ha più importanza:


var MY = function(params) {
    
    this.one = params.one || null;
    this.two = params.two || null;
    this.three = params.three || null;

    this.init = function() {
        console.log(this.one + ' ' + this.two + ' ' + this.three);
    }

    return this.init();
};

Esempio:


var my = new MY({
    one: 'a',
    three: 'c',
    two: 'b'
}); // output: a b c

Nota su jQuery

In jQuery questa pratica è enormemente semplificata dal metodo $.extend():


var MY = function(params) {
    
    params = $.extend({
        one: null,
        two: null,
        three: null
    }, params);
    
    this.one = params.one;
    this.two = params.two;
    this.three = params.three;

    this.init = function() {
        console.log(this.one + ' ' + this.two + ' ' + this.three);
    }

    return this.init();
};

Come si può notare i parametri predefiniti qui vengono interamente gestiti tramite l'ereditarietà.

Torna su