Вызов функции через переменную
Всем привет, не могу понять как сделать простейшую вещь - вызвать функцию через переменную по аналогии с пхп.
Например у меня есть функция 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, время: 22:33. |