Вызов JavaScript-функции по ее названию
Иногда в JavaScript’е бывает необходимо выполнить функцию зная только ее название, и это название содержится в строке, например вот так:
var funcName = 'someFunc';
Перед мной стояла такая задача: в AIR-приложении нужно было выполнять функции, названия которых приходят с AJAX-ответом. Sandbox AIR’а в следствии ограничений безопасности не позволяет выполнять функции при помощи eval’а. Так что, ограничения стояли такие: не использовать функции eval() и setTimeout()/setInterval().
Немного по-google-в я нашел множество вопросов о том как это сделать, но к сожалению без ответов. И решение не заставило себя долго ждать. Итак, идея моя была в следующем: все функции, которые предполагается вызывать таким образом, нужно собрать в одном массиве (объекте), и вызывать их обращаясь к ним как к элементам ассоциативного массива. Вот такое решение получилось в итоге:
// собираем нужные функции в массиве
var actions = {
someFunc: function(params) {
...
},
goodFunc: function(params) {
...
}
};
// это название функции допустим переданное в ответе на AJAX-запрос
var funcName = 'someFunc';
// а это параметры функции переданные все в том же ответе
var funcParams = {title: "Test Title", content: "Test Content"}
// вызываем функцию
actions[funcName](funcParams);
Если кто-то ищет решение этой задачи, то надеюсь мой небольшой хинт вам в этом поможет!
June 11th, 2008 at 11:50
Или можно так:
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));
June 11th, 2008 at 14:32
Так нельзя! Sandbox также запрешает создание функции.