【问题标题】:Concatenation function name in jsjs中的连接函数名称
【发布时间】:2014-06-09 10:12:53
【问题描述】:

有没有办法连接一个 js 函数名?现在我有这个:

switch (playId) {
        case "11":
            play11();
            break;
        case "22":
            play22();
            break;
        case "33":
            play33();
            break;
        case "44":
            play44();
            break;
        default:
            break;
    }

我想做这样的事情:

var function = "play" + playId + "()";

然后调用它。如果可能的话,最好的方法是什么?


解决方案:

我在thefourtheyexdazz 的帮助下所做的非常简单:

var playFunction = window["play" + playId];
    playFunction();

【问题讨论】:

    标签: javascript string-concatenation


    【解决方案1】:

    最好的办法是把它们放在这样的对象中

    var functions = {
        11: play11,
        22: play22,
        33: play33,
        44: play44
    };
    

    然后像这样调用它

    functions[taksId]();
    

    既然你不想在找不到taskId的情况下失败,你可以这样做

    if (functions.hasOwnProperty(taskId)) {
        functions[taksId]();
    }
    

    【讨论】:

      【解决方案2】:

      如果这些函数是在全局范围内定义的,那么您可以从全局对象中获取它们:

      var foo = window["play" + taskId];
      

      否则,您可以将它们放在一个对象中,就像另一个答案所建议的那样。

      【讨论】:

      • 它不限于全局范围(但超出了这个问题的范围),但我总是会尽量避免它。在缩小代码后它可能会中断,并且在大型项目中搜索未使用的功能变得不可能。使用“字典”对象并没有更多的工作和可读性。 - 答案很好。
      【解决方案3】:

      如果你把函数放在一个数组中:

      var functions = {
          'play1':function(){},
          'play2':function(){}
      }
      

      这样称呼它:

      functions['play'+number]();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 2021-05-20
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        相关资源
        最近更新 更多