javascript - 当我将其名称作为字符串时如何执行 JavaScript 函数

标签 javascript

我在 JavaScript 中有一个函数的名称作为字符串。如何将其转换为函数指针,以便稍后调用?

根据情况,我可能还需要将各种参数传递给方法。

某些函数可能采用 namespace.namespace.function(args[...]) 的形式。

最佳答案

不要使用 eval,除非你绝对肯定别无选择。

如前所述,使用这样的方法是最好的方法:

window["functionName"](arguments);

但是,这不适用于命名空间的函数:

window["My.Namespace.functionName"](arguments); // fail

你会这样做:

window["My"]["Namespace"]["functionName"](arguments); // succeeds

为了使这更容易并提供一些灵 active ,这里有一个方便的功能:

function executeFunctionByName(functionName, context /*, args */) {
  var args = Array.prototype.slice.call(arguments, 2);
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i++) {
    context = context[namespaces[i]];
  }
  return context[func].apply(context, args);
}

你可以这样调用它:

executeFunctionByName("My.Namespace.functionName", window, arguments);

注意,你可以在任何你想要的上下文中传递,所以这和上面的一样:

executeFunctionByName("Namespace.functionName", My, arguments);

关于javascript - 当我将其名称作为字符串时如何执行 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359788/

相关文章:

javascript - 如何使用google api减少折线图中haxis和注释值之间的差距

javascript - 菜单中的下拉列表在单击之前消失

javascript - YUI 压缩器是否支持多个文件的捆绑?

javascript - 如何在不刷新页面的情况下显示不同的搜索结果

javascript - 使用 Html5 API,如何扭曲图像(更改左侧或右侧高度)?

javascript - 使用 Angularjs 检查当前时间是否在打开时间和关闭时间之间

javascript - 从另一个网站的小部件中删除文本

javascript - 使用表中的选定选项计算单元格值

javascript - 除了执行 Object.prototype.hasOwnProperty.call(obj, key) 是否有 ES6+ 替代方案?

javascript - 在 react js中获取文件类型