2012-02-20 42 views
1

好的,希望这会得到正确。我正在构建一个通用的JavaScript函数,它将构建一个菜单,然后构建每个菜单项调用的函数。为此,我需要传递要为每个选项调用的命令列表。Javascript:可以通过变量将函数命令传递给另一个函数吗?

因此,例如:

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

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

我相信做这种方式完全是愚蠢的,但我不知道该怎么做。

基本上,我需要我的函数在变量的基础上执行其他函数。

谢谢!

回答

1

可以执行使用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()的点处定义。

(这显然是过于简单的例子,但我希望你能看到它是如何为您的实际需求的工作。)

6

我向你展示了如何使用它。

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

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

myFunction(thecall); 
0

我觉得你找eval功能。

var code= 'alert("hi, this works");'; 
eval(code); 
相关问题