我有一个字符串,它是我的 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/