Вызов JavaScript-функции по ее названию
Иногда в JavaScript’е бывает необходимо выполнить функцию зная только ее название, и это название содержится в строке, например вот так:
1 | var funcName = 'someFunc'; |
Перед мной стояла такая задача: в AIR-приложении нужно было выполнять функции, названия которых приходят с AJAX-ответом. Sandbox AIR’а в следствии ограничений безопасности не позволяет выполнять функции при помощи eval’а. Так что, ограничения стояли такие: не использовать функции eval() и setTimeout()/setInterval().
Немного по-google-в я нашел множество вопросов о том как это сделать, но к сожалению без ответов. И решение не заставило себя долго ждать. Итак, идея моя была в следующем: все функции, которые предполагается вызывать таким образом, нужно собрать в одном массиве (объекте), и вызывать их обращаясь к ним как к элементам ассоциативного массива. Вот такое решение получилось в итоге:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // собираем нужные функции в массиве var actions = { someFunc: function(params) { ... }, goodFunc: function(params) { ... } }; // это название функции допустим переданное в ответе на AJAX-запрос var funcName = 'someFunc'; // а это параметры функции переданные все в том же ответе var funcParams = {title: "Test Title", content: "Test Content"} // вызываем функцию actions[funcName](funcParams); |
Если кто-то ищет решение этой задачи, то надеюсь мой небольшой хинт вам в этом поможет!

Или можно так:
function multiple(x, y){
return x*y;
}
// new Function(, );
var f = new Function(“x, y”, “return multiple(x, y);”);
alert(f(3, 7));
// или так
alert(new Function(“x, y”, “return multiple(x, y);”)(8, 6));
Так нельзя! Sandbox также запрешает создание функции.
а еще проще так:
var funcName=’myfunction’;
self[funcName](список аргументов);
self может быть parent и прочее, зависит от уровня функции