Вы можете выполнить произвольные строки 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()
.
(Очевидно, это упрощенный пример, но я надеюсь, что вы сможете увидеть, как он будет работать для ваших реальных требований.)