Newsgroup: it.comp.lang.javascript
Titolo: Chimare funzioni diverse

Buongiorno.
SUpponiamo di avere una funzione che ne richiama un'altra in questo modo:
 
//**********FUNZIONE 1
 
function Inserisci(valore){
 
//...varie istruzioni
 
Inserisci_nome(valore);
 
    } 
 
//**********FUNZIONE 2
 
function Inserisci_nome(valore){
 
var NEW_FUNCTION = "Inserisci_nome_" + valore;
 
NEW_FUNCTION(valore);   //questa riga vorrebbe chiamare una terza funzione!
 
    } 
 
dove "valore" è un valore numerico.
 
Quello che vorrei fare è chiamare una FUNZIONE DIFFERENTE ogni volta che cambia il "valore".
Quindi posso chiamare le funzioni:
 
Inserisci_nome_1(valore)
Inserisci_nome_2(valore)
Inserisci_nome_3(valore)
Inserisci_nome_4(valore)
...
eccetera a seconda di "valore".
 
Se "valore" = 1, per esempio, chiamero' questa funzione:
 
function Inserisci_nome_1(valore){
//istruzioni...
    } 
 
e via andare...
Perchè la funzione "Inserisci_squadra_1(valore)" non funziona?
Eppure ho assegnato alla variabile "NEW_FUNCTION" proprio la stringa Inserisci_squadra_1"
 
io non capisco...

 Inserisci_squadra_1"
 
Qui c'è un refuso.La funzione si chiama:
 
Inserisci_nome_1(valore) e NON
 
Inserisci_squadra_1(valore)
 
Scusate.


 
Le tue funzioni paiono essere globali e sono quindi proprietï¿½ del 
cosiddetto "global object"; che in un browser ï¿½ l'oggetto window.
 
Quindi per fare la chiamata che volevi nel tuo codice:
 
   window[NEW_FUNCTION]();
 
Giusto per amor di discussione, anche "eval" avrebbe funzionato nel tuo 
caso, ma quando arrivi a pensare a "eval" nel 99% dei casi hai sbagliato 
un ragionamento a monte.
 
Tutto questo era solo per rispondere al caso specifico, ma, ripeto, c'ï¿½ 
qualcosa che non va nell'approccio che stai usando.
 

 qualcosa che non va nell'approccio che stai usando.
 
Allora mi spiego a blocchi e per passi.
 
FUNZIONE_A(val) -> CHIAMO LA FUNZIONE_B(val) CHE SI TROVA ALL'INTERNO DELLA FUNZIONE_A
 
Questo è chiaro.
 
Adesso prediamo la FUNZIONE_B(val). 
All'interno di questa FUNZIONE_B(val) io voglio chiamare una, chiamiamola, FUNZIONACCIA(val) il cui nome però, NON E' COSTANTE.
Nel senso che vorrei fare un call di questa FUNZIONACCIA(val) che, a seconda di "val", assume LEI STESSA i seguenti nomi:
 
FUNZIONACCIA_1(val)
FUNZIONACCIA_2(val)
FUNZIONACCIA_3(val)
FUNZIONACCIA_4(val)
...
eccetera
 
dove il numero è "val", variabile di volta in volta.
 
L'importante è capire che questa FUNZIONACCIA(val) non è UNICA (anzi io ho molte FUNZIONACCIA(val) tutte diverse a seconda di "val").
 
Grazie
 

 Grazie
 
Questo l'avevo capito, ed ï¿½ proprio questo che sto criticando.
 
Per fare quel che chiedi vedi la mia risposta precedente: bracket notation.
 
Provo con una domanda: cosa fanno di cosï¿½ differente l'una dall'altra le 
varie fn_1, fn_2, ecc. da dover essere funzioni separate?
 

    window[NEW_FUNCTION]();
 
 
 
Ok ok la tua soluzione è perfetta.
Grandioso.
Ora dimentica tutto. Cancellalo dalla tua mente.
 
Supponiamo di avere tre distinte variabili array fatte così:
 
var TEMPO_1 = [
 
10,
23,
14,
16
 
];
 
var TEMPO_2 = [
 
3,
42,
12,
10
 
];
 
var TEMPO_3 = [
 
11,
2,
9,
6
 
];
 
Adesso io voglio fare il call di una funzione, chiamiamola per comodita' ESTRUSO(2), che si becca in entrata il valore 2, avro' una cosa tipo:
 
ESTRUSO(val) {
 
   var PIPPO = "TEMPO_" + val;   //in questo caso val=2
 
           PIPPO[1];           //qui voglio accedere al valore TEMPO_2[1] = 42 (il nome della variabile è in funzione di "val")     
 
               }
 
Ma come faccio a far capire che PIPPO è proprio TEMPO_2?
Non so se si capisce.
Grazie

 seconda di "val", assume LEI STESSA i seguenti nomi:
 
Questo codice puzza di marcio da qualche Km.
 
Lascia perdere questa idea malsana, e scegli tra:
 
1- uno switch/if che seleziona la funzione da chiamare in base ai 
parametri (una sorta di strategy pattern)
 
2- passare la funzione da chiamare come callback: 
function f_b(p1, p2, cb) {
 ...
 res = cb(p1, p2);
 ...
 return res;
}
 
Bye.


Non ho capito una sola parola di quello che hai scritto
 
:))

 Non ho capito una sola parola di quello che hai scritto
 
OK, capita. :D
 
Te la metto in altro modo: descrivi il problema che hai, e non la 
soluzione che pensi di aver trovato.
 
"Mi serve richiamare funzioni con nomi dinamici" non è il problema, è la 
soluzione che pensi di aver trovato.
 
Descrivi il caso reale. Molto probabilmente ci sono soluzioni migliori.
 
Bye.

 Ma come faccio a far capire che PIPPO ï¿½ proprio TEMPO_2?
 
La "pezza" ï¿½ sempre nella mia prima risposta: l'hai applicata senza 
capire come funziona, sembra. Leggi il link che ti ho proposto e fai 
pure domande dove hai dubbi.
 
Oltre a fare domande... rispondi anche alle nostre!
Sia io che Alessandro ti abbiamo detto a piï¿½ riprese che c'ï¿½ qualcosa 
che non va nell'impostazione del tuo codice: ï¿½ difficile, e frustrante, 
cercare di aiutarti se dai l'impressione di ignorare consigli pur di 
arrivare al tuo risultato.
 
 
 
 


Vi ringrazio infinitamente. Mi si è aperto un mondo.
La soluzione l'ho trovata, è eccezionalmente logica, leggendo e rileggendo meglio il "problema" e vedendolo, come dite voi, come se fosse la soluzione.
Grazie ancora.