Вызов функции через переменную
Всем привет, не могу понять как сделать простейшую вещь - вызвать функцию через переменную по аналогии с пхп.
Например у меня есть функция my_func() и я хочу присвоить ее имя переменной fn_name = 'my_func'; и вызвать fn_name.apply(this, '123'), но мне пишет что в fn_name - не функция, как это делается в яваскрипте самым простым способом? |
Зачем? Поместите в переменную саму функцию, а не имя.
|
function my_func() { alert('lala'); } var fn_name = 'my_func'; window[fn_name](); |
function myFunc() { alert(this); } var fnName = myFunc; fnName.call(123); |
Safort, большое спасибо, то что надо!
vasa_c, дело в том, что имя функции генерится динамически. Кстати, я еще один способ нашел - просто через eval(). |
Ну, вот, дали человеку решение в лоб, теперь он будет фигнёй маятся, вместо того, чтобы подумать.
|
Цитата:
|
Цитата:
|
Хотя бы о том, что использование эвала исключает любые оптимизации кода интерпретатором.
Цитата:
|
Цитата:
|
iNfantry,
скажем так, это не очень хорошо. eval() нельзя использовать в strict mode. И если у тебя есть однотипные функции, то можно запихнуть их в объект, это будет удобнее и в глобальное пространство имён мусорить не будешь. var obj = { funcA: function() {}, funcB: function() {}, funcC: function() {}, }; //вызов obj['funcA'](); //или так, если заранее знаешь имя obj.funcA(); |
Цитата:
var functions = { A: function() {}, B: function() {}, C: function() {} }; functions["A"](); functions["B"](); Цитата:
|
Цитата:
"use strict"; console.log(eval("1 + 1")); Другое дело, что единственный кейс, где он должен применяться - это выполнение произвольного кода. |
Цитата:
|
Erolast,
Цитата:
Цитата:
|
Да, про евал я понял, он мне и самому не нравится, а насчет списка функций да, согласен, что лучше какой-то промежуточный контейнер с этими функциями вместо глобального window. Именно этот вариант я и выбираю, всем спасибо)
|
Часовой пояс GMT +3, время: 18:28. |