Autor Zpráva
Senty
Profil *
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
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 *
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
Sentytakze tento postup asi nebude optimalni
To nebude v žiadnom prípade, keď je zlý návrh, tak to lepšie nebude...
Senty
Profil *
ok, takze to beru tak, ze timto zpusobem volat funkce nelze
_es
Profil
var x = [funkcia1, funkcia2, funkcia3];
x[id](); // zavolanie funkcie funkcia1, funkcia2 alebo funkcia3 podľa id (0, 1 alebo 2)
Senty
Profil *
_es: skvely, taky me napadlo podobne reseni. at ziji pole :) tvoje je ale o neco komfortnejsi, takze diky .. vsem
_es
Profil
Alebo keď je funkcia globálna, tak sa dá funkcia s názvom nejaka_funkcia volať aj ako window["nejaka_funkcia"]()
Chamurappi
Profil
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](); 
}
Ale nepřipadá mi to jako moc čisté řešení.

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]();
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: