giovedì 9 giugno 2011

Javascript : richiamare funzione attraverso nome del metodo contenuto in un array

Buongiorno a tutti,
stamane ho voglia di scrivere (e di conseguenza ricordare per i posteri :P) un metodo che mi consenta di richiamare delle funzioni javascript , valorizzandone l'input a mio piacimento, senza la necessità di dover riscrivere ogni qual volta fosse necessario il nome del metodo e i parametri necessari.
Và detto che questo metodo è molto comodo soprattutto quando si ha la necessità di richiamare tante funzioni all'interno di uno stesso contesto e con parametri molto simili, così invece di avere tanti if uno dietro l'altro...si ha un solo ciclo for che si occupa di verificare la funzione richiesta e di richiamarla valorizzata correttamente.

Vediamo come fare !

1) Inizializzo array con il nome dei metodi necessari.

/* Array globale contenente il nome delle funzioni da richiamare (che in questo caso sono identiche ai nomi delle rispettive funzioni javascript) */
var arrayFunction = ["funct_1","funct_2","fucnt_3"];

2) Creo il metodo tramite il quale potremo richiamare ,diciamo dinamicamente, la funzione richiesta

/* Funzione che consente di chiamare dinamicamente una funzione javascript con tanto di passaggio di dati dinamici (indipendentemente dalla quantita' di parametri passati) */
function dynamicFunc(){
/* Il primo elemento e' il nome della funzione da richiamare, pertanto shifto avanti di un elemento per ottenere i parametri da passare */
window[Array.prototype.shift.call(arguments)].apply(null,arguments);
}

3) Ciclo l'array finchè non trovo il metodo giusto da richiamare, valorizzandone i parametri.

function caricaMetodoJS(funzioneJs,Param2){
for(i=0;i<arrayFunction .length;i++){
/* Controllo quale sia la funzione richiesta e se risulta presente nell'arrayFunction */
if(arrayFunction [i]==funzioneJs)
/* Come potete vedere vengono passati 3 parametri alla funzione dynamicFunc.
Avremmo potuto passargli anche altri 5-6 parametri, a nostra scelta;
ovvio comunque che il primo parametro necessario è il nome della funzione richiesta, così da rispettare quanto avviene nel metodo dynamicFunc, ove viene preso l'array di argomenti passati, shiftato di uno così da poter utilizzare solo i parametri giusti , senza il nome della funzione richiesta .
*/
dynamicFunc(arrayFunction [i],Param1,Param2);
}
}

Mi è stato molto utile trovare un metodo come questo, soprattutto perchè ho risparmiato moltissime righe di codice e , a mio parere, semplificato una quantità numerosa di metodi che in precedenza necessitavano di tanti if e personalizzazioni particolari.
Ovviamente necessito di uno studio più approfondito riguardo la seguente funzione
-->window[Array.prototype.shift.call(arguments)].apply(null,arguments);
poichè non mi è ancora chiara al 100%; vi (e mi) terrò aggiornati ;)

Alla prossima,
Saluti.

Bertu

Nessun commento:

Posta un commento