javascript - 作为字符串调用函数

标签 javascript

我有一个字符串,它是我的 JavaScript 函数:

var foo = "CONCATENATE('a', ' ', 'b')";

如何在不使用eval()的情况下使用javaScript调用此函数?

最佳答案

:)这是一个有趣的问题。让我一次一步地完成这个过程。这将无法处理所有事情,而只能处理带有字符串参数的函数。

这是一个包含一些基本代码的 jsFiddle:http://jsfiddle.net/Sqa8L/

请注意,我根本没有测试过它,所以请务必小心使用。

第 1 步:使用正则表达式获取函数名称

理想情况下,我建议使用某种解析器来获得更可靠的结果,但我认为一旦您理解了一般概念,您就可以遵循这个答案。所以,首先是正则表达式:

var matchFnName = /^([^(]+)\(([^)]+)\)/.exec(str);

这将为您提供两个匹配项,第一个匹配函数名称,第二个匹配整个参数列表。 (除非其中有复杂的表达式,在这种情况下,它将失败:))。

提取参数

我刚刚使用简单的语句进行了拆分:

var paramList = paramListStr.split(',');

如果任何字符串包含“,”,则会失败。您将需要更好的解析技术来处理这个问题。

在对象上调用函数

您需要发送一个能够响应函数调用的对象,或者它默认为全局范围。

onObject[fnName].apply(onObject, paramList);

查看申请here 。基本上,apply 的作用是调用第一个参数 onObject 中提供的对象上的函数,并在第二个参数 paramList 中传递参数列表.

希望这有助于您开始朝着大方向迈进。

关于javascript - 作为字符串调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895325/

相关文章:

javascript - Meteor simple-todos tut - 第 2 步 - Uncaught Error 找不到模块 './template.body.js

javascript - 使用 JavaScript 隐藏一个 div

javascript - HTML Canvas 不显示我的矩形

javascript - 删除行空格

javascript - 自定义 Select 和 Input 标签,IE 版本看起来很糟糕

Java Servlet 不会停止推送通知

javascript - 以编程方式生成/激活的文件输入并不总是触发 `input` 事件

javascript - 如何更改 Kendo Chart 的背景图片?

javascript - 限制文本区域中的字符,如何考虑回车?

javascript - Jquery - 翻转时淡入/淡出闪烁