Javascript: можно передать команды функции другой функции через переменную? - PullRequest
1 голос
/ 21 февраля 2012

Ладно, надеюсь, это правильно. Я создаю универсальную функцию JavaScript, которая будет создавать меню, а затем также создавать функции, которые будут вызывать каждый элемент меню. Для этого мне нужно передать список команд, которые будут вызываться для каждой опции.

Так, например:

var thecall = 'alert("hi, this works");';

function myfunction(thecall)
{
  //In here I want to excute whatever commands is listed in variable thecall
 .....
}

Я уверен, что делать это таким образом совершенно глупо, но я не знаю, как еще это сделать.

По сути, мне нужна моя функция для выполнения других функций на переменной основе.

Спасибо !!

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

Я немного изобразил, чтобы показать вам, как вы можете его использовать.

var thecall = function(name){alert("hi " + name + ", this works");};

function myFunction(function_ref)
{
  function_ref('Mark');
}

myFunction(thecall);
1 голос
/ 21 февраля 2012

Вы можете выполнить произвольные строки JavaScript, используя eval(), но это не лучшее решение для вас (здесь почти никогда не лучшее решение).

Функции в JavaScript сами по себе являются объектами, что означает, что вы можетехранить несколько ссылок на одну и ту же функцию в нескольких переменных или передавать ссылки на функции в качестве параметров и т. д. Итак:

var thecall = function() {
   alert("hi, this works");
};

function myfunction(someFunc)  {
   someFunc();    // call the function that was passed
}

myfunction(thecall);   // pass reference to thecall

Обратите внимание, что при передаче ссылки на функцию thecall круглые скобки отсутствуют, т.е.Вы говорите thecall, а не thecall(): если бы вы сказали myfunction(thecall()), это немедленно вызвало бы thecall и передало бы все, что было возвращено myfunction.Без скобок он передает ссылку на thecall, которая затем может быть выполнена из myfunction.

В вашем случае, когда вы говорите о списке пунктов меню, где каждый элемент должен вызывать определенную функцию, которую выможет сделать что-то вроде этого:

var menuItems = [];
function addMenuItem(menuText, menuFunction) {
   menuItems.push({ "menuText" : menuText, "menuFunction" : menuFunction });
}

function test1() {
   // do something
}

addMenuItem("Test 1", test1);
addMenuItem("Test 2", function() { alert("Menu 2"); });

// and to actually call the function associated with a menu item:
menuItems[1].menuFunction();

Обратите внимание, что второй элемент меню, который я добавляю, имеет анонимную функцию, определенную прямо в точке, где он передается в качестве параметра addMenuItem().

(Очевидно, это упрощенный пример, но я надеюсь, что вы сможете увидеть, как он будет работать для ваших реальных требований.)

0 голосов
/ 21 февраля 2012

Я думаю, вы ищете функцию eval .

var code= 'alert("hi, this works");';
eval(code);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...