【问题标题】:Javascript: Possible to pass function commands to another function via a variable?Javascript:可以通过变量将函数命令传递给另一个函数吗?
【发布时间】:2012-02-20 22:31:26
【问题描述】:

好的,希望这能正确处理。我正在构建一个通用的 javascript 函数,它将构建一个菜单,然后还构建每个菜单项将调用的函数。为此,我需要传递为每个选项调用的命令列表。

例如:

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

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

我敢肯定这样做是完全愚蠢的,但我不知道该怎么做。

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

谢谢!!

【问题讨论】:

    标签: javascript function


    【解决方案1】:

    为了向您展示如何使用它,我做了一些花哨的操作。

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

    【讨论】:

      【解决方案2】:

      您可以使用 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() 时定义了一个匿名函数。

      (显然这是一个过于简单的示例,但我希望您能看到它如何满足您的实际需求。)

      【讨论】:

        【解决方案3】:

        我认为您正在寻找 eval 函数。

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

        【讨论】:

          猜你喜欢
          • 2022-06-22
          • 2014-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多