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