可以执行使用eval()
的JavaScript的任意字符串,但不是最好的解决方案,你在这里(这是几乎从来没有最好的解决方案)。在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()
的点处定义。
(这显然是过于简单的例子,但我希望你能看到它是如何为您的实际需求的工作。)