我有一个字符串是我的 javaScript 函数:
var foo = "CONCATENATE('a', ' ', 'b')";
如何在不使用的情况下对此函数进行 JavaScript 调用eval()
?
我有一个字符串是我的 javaScript 函数:
var foo = "CONCATENATE('a', ' ', 'b')";
如何在不使用的情况下对此函数进行 JavaScript 调用eval()
?
:) 这是个有趣的问题。让我一步一步来。这将无法处理所有内容,而只能处理带有字符串参数的函数。
这是一个带有一些基本代码的 jsFiddle:http: //jsfiddle.net/Sqa8L/
请注意,我根本没有对其进行测试,因此请谨慎使用。
理想情况下,我建议使用某种解析器来获得更可靠的结果,但我认为一旦你理解了一般概念,你就可以继续这个答案。所以,首先是正则表达式:
var matchFnName = /^([^(]+)\(([^)]+)\)/.exec(str);
这将为您提供两个匹配项,一个用于函数名称,第二个用于整个参数列表。(除非你有复杂的表达式,在这种情况下,它会失败:))。
我刚刚使用简单的语句进行了拆分:
var paramList = paramListStr.split(',');
如果任何字符串包含“,”,这将失败。您将需要更好的解析技术来处理这个问题。
您需要发送一个响应函数调用的对象,或者它默认为全局范围。
onObject[fnName].apply(onObject, paramList);
看看在这里申请。基本上,apply
所做的是调用第一个参数中提供的对象上的函数onObject
,并在第二个参数中传递一个参数列表paramList
。
希望这有助于您开始大方向。
无论您将使用哪种解决方案,它都会在 javascript 级别隐式或显式调用eval()
,或者在引擎级别等效。