【问题标题】:JavaScript dynamic function nameJavaScript 动态函数名
【发布时间】:2012-05-02 18:26:29
【问题描述】:

我需要将函数的名称动态分配给关联数组的元素。这是我的尝试,它不起作用。我寻求帮助的问题是在这里我尝试调用该函数:cr['cmd1'](x);

<!DOCTYPE html>

<html>
<head>
    <script type="text/javascript">
        var cr =[];
        var x = 5;
        cr['cmd1'] ='foo';
        var msg = cr['cmd1'](x);  
        alert(msg);

        function foo(y){
            return y;
        }
    </script>
</head>
<body>
</body>
</html>

编辑:我在这里传递了一个我无法控制的字符串cr['cmd1'] ='foo';。这就是为什么我必须使用字符串作为外部应用程序的起点。

【问题讨论】:

  • 什么不起作用?有什么错误?您期望警报结果是什么?

标签: javascript


【解决方案1】:

使用此语法window[function_name]('para1');访问函数

你的用法会是这样的

var msg = window[cr['cmd1']](x);

【讨论】:

    【解决方案2】:

    如果要将其存储为函数,则直接传递函数。否则,如果您只想将其存储为字符串,则可以使用引号。

    变化:

    cr['cmd1'] ='foo';
    

    收件人:

    cr['cmd1'] = foo;
    

    【讨论】:

    • 柯克,谢谢,但我被传递了一个字符串“foo”作为起点。
    【解决方案3】:

    我会使用 window[] 并在尝试执行它之前确保它是一个函数,因为您无法控制传递的内容。

    var f = window[cr['cmd1']];
    if(typeof f==='function') {
      f(x);
    }
    

    【讨论】:

      【解决方案4】:

      您正在做的是将函数分配给数组。您可能尝试做的更常见的模式是使用数组表示法在对象上调用函数。

          <script type="text/javascript">
              var cr = {};
              cr.cmd1 = function foo(y){
                  return y;
              };
              var x = 5;
              var msg = cr['cmd1'](x);  
              alert(msg);
          </script>
      

      此代码会生成一个包含数字 5 的警告框。

      【讨论】:

        猜你喜欢
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多