Autor Zpráva
JPAS
Profil
Zdravím diskusi,

hledám co to jde, ale nevím jak zavolat funkci způsobem, že v proměnné nazevFunkce bude název funkce, chtělo by to něco jako:



zavolej_funkci( nazevFunkce )

a bylo by to v podstatě klasické volání funkce jako nazevFunkce();.

Je něco takového v JavaScriptu, povolaným moc děkuji za odpověď.
Peca
Profil
http://www.jakpsatweb.cz/javascript/zabudovane-funkce.html#eval ?
ah01
Profil
Malý příklad:

function test(text){
alert(text);
}

function call(fce, arg){
fce(arg);
}

call(test, 'Ahoj');


Trochu možná elegantnější (přehlednější) je použít metodu call nebo apply objektu Function (pro vysvětlení: každá funkce je objekt typu Function, takže jako každý objekt i funkce má své metody)


function call(fce, arg){
fce.call(null, arg);
}

první parametr metody call je reference na objekt „this“, který lze použít v těle fce., v tomto příkladě není potřeba, ale má velké použití při OOP. Další argumenty jsou už předány jako běžné argumenty fce. kterou voláme. Metoda apply se od call liší pouze v tom, že vlastní argumenty fce. se ji předávají v podobě pole.

Peca
fci. eval bych se pokud možno snažil vyhnout (jako čert kříže), jediné kdy by to snad nešlo, je případ kdybych měl název fce. jako řetězec, ale takový skript by byl asi dost „prasárna“.
los
Profil *
Súhlasím s ah01, iba by som opravil preklep: metóda allpy sa volá apply.

Ak máš v premennej odkaz na funkciu, tak tú funkciu zavoláš tak, ako keby tá premenná bola priamo tou funkciou.

Ak máš v premennej iba názov funkcie ako reťazec a vieš, v akom objekte je definovaná, môžeš ju zavolať pomocou normálneho prístupu k vlastnosti objektu, v ktorom je tá funkcia (globálne premenné a teda aj globálne funkcie sa nachádzajú v objekte window).

Jedine v prípade, že to inak nejde, tak použiť funkciu eval (toto ale nie je ten prípad).

function test() {alert("test);}


// ak mas v premennej odkaz na funkciu
var premenna = test;
premenna(); // zavola sa funkcia test

// ak mas v premennej meno funkcie ako retazec a funkcia je ulozena v nejakom objekte (v tomto pripade window)
var premenna = "test";
window[premenna](); // zavola sa funkcia test
ah01
Profil
los
„metóda allpy sa volá apply“, nojo nějak jsem se upsal :-), už jsem to opravil
Na možnost volat fci. v rámci globálního objektu jsem úplně zapomněl, díky za doplnění.
JPAS
Profil
Moc děkuji za objasnění, dal jsem si to konečně dohromady, díky.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0