Autor | Zpráva | ||
---|---|---|---|
Senty Profil * |
#1 · Zasláno: 11. 5. 2009, 10:47:58
Zdravim,
potreboval bych volat js funkci, jejiz nazev dopredu presne neznam. Priklad: mam tri funkce: function funkce_1() { .. } function funkce_2() { .. } function funkce_3() { .. } a potrebuju zavolat jednu z nich v zavislosti na hodnote promenne "id" (ktera muze nabyt hodnot 1, 2 nebo 3) function volej( id ) { return funkce_ [ ted sem nejak dosadit tu promennou id ] (); } Snad jsem svuj problem vysvetlil srozumitelne. Urcite mi budete chtit napsat, proc nevolam jednu funkci, ktere predavam toto id, ale kvuli logice (zrejme spatneho) navrhu to bohuzel neni mozne. Díky za kazdou radu |
||
Joker Profil |
#2 · Zasláno: 11. 5. 2009, 10:55:13
Senty
a potrebuju zavolat jednu z nich v zavislosti na hodnote promenne "id" (ktera muze nabyt hodnot 1, 2 nebo 3) Tak jestli jsou jen tři... function volej( id ) { switch(id){ case 1 : return(funkce_1()); break; case 2 : return(funkce_2()); break; case 3 : return(funkce_3()); break; default: return(false); } } |
||
Senty Profil * |
#3 · Zasláno: 11. 5. 2009, 10:57:45
Joker: ah, tak to bohuzel ne, sice jich nebudou desitky, ale jejich cisla budou ruzna (treba i trojciferna), takze tento postup asi nebude optimalni .)
|
||
tiso Profil |
#4 · Zasláno: 11. 5. 2009, 11:00:55
Senty „takze tento postup asi nebude optimalni“
To nebude v žiadnom prípade, keď je zlý návrh, tak to lepšie nebude... |
||
Senty Profil * |
#5 · Zasláno: 11. 5. 2009, 11:03:23
ok, takze to beru tak, ze timto zpusobem volat funkce nelze
|
||
_es Profil |
#6 · Zasláno: 11. 5. 2009, 11:13:29
var x = [funkcia1, funkcia2, funkcia3]; x[id](); // zavolanie funkcie funkcia1, funkcia2 alebo funkcia3 podľa id (0, 1 alebo 2) |
||
Senty Profil * |
#7 · Zasláno: 11. 5. 2009, 11:17:05
_es: skvely, taky me napadlo podobne reseni. at ziji pole :) tvoje je ale o neco komfortnejsi, takze diky .. vsem
|
||
_es Profil |
#8 · Zasláno: 11. 5. 2009, 11:19:37
Alebo keď je funkcia globálna, tak sa dá funkcia s názvom nejaka_funkcia volať aj ako window["nejaka_funkcia"]()
|
||
Chamurappi Profil |
#9 · Zasláno: 11. 5. 2009, 11:20:23
Reaguji na Sentyho:
Jelikož jsou zápisy „objekt.člen“ a „objekt["člen"]“ ekvivalentní, stačí, když budou obě funkce uvnitř téhož rodičovského objektu, a můžeš jejich název sestavovat jako řetězec. Ve tvém případě bude tím rodičem patrně window. Mělo by fungovat toto: function volej(id) { return window["funkce_" + id](); } Víš, že v JavaScriptu můžeš mít pole funkcí? var pole = []; pole[0] = function() { /* tělo první funkce */ }; pole[1] = function() { /* tělo druhé funkce */ }; pole[2] = function() { /* tělo třetí funkce */ }; function volej(id) { return pole[id - 1](); } |
||
Časová prodleva: 15 let
|
0