Spesso si ha l'esigenza di eseguire tutti i metodi di una classe (o oggetto) JavaScript in modo automatico e senza doverli invocare uno alla volta. Inoltre si vorrebbe poterli invocare non solo in modo automatico, ma anche seguendo un ordine di esecuzione. Sfortunatamente JavaScript non supporta tale funzionalità in modo nativo, quindi siamo costretti a ricorrere ad una soluzione alternativa. Vediamone i dettagli.
Abbiamo il seguente oggetto:
var Class = {
property: 'Test',
method1: function() {
alert(Class.property + ' 1');
},
method2: function() {
alert(Class.property + ' 2');
},
method3: function() {
alert(Class.property + ' 3');
},
// continua
};
Vogliamo poter eseguire i tre metodi sopra specificati in modo automatico ed in ordine discendente (dal terzo al primo). Ecco come possiamo fare:
// continua
autoload: function(methods) {
methods = methods || [];
var i, len = methods.length;
if(len !== 0) {
for(i = 0; i < len; i += 1) {
methods[i]();
}
} else {
for(var j in this) {
if(typeof this[j] === 'function' && this[j] !== arguments.callee) {
this[j]();
}
}
}
}
Il nostro metodo autoload()
aggiunto alla classe specificata in precedenza accetta un'array di nomi di metodi come argomento opzionale. Se questo argomento viene specificato, tutti i metodi vengono eseguiti nell'ordine specificato nell'array. In caso contrario tutti i metodi della classe vengono eseguiti ad eccezione ovviamente dello stesso metodo autoload()
. In tal caso, tuttavia, l'ordine è quello specificato nella definizione della classe. Un esempio:
window.onload = function() {
Class.autoload([Class.method3, Class.method2, Class.method1]);
};
Il vantaggio maggiore è quello di specificare in una sola dichiarazione l'ordine di esecuzione desiderato.
Potete visionare l'esempio finale in questa pagina.