如何执行名称为字符串的JavaScript函数

时间:2014-01-21 09:51:32

标签: javascript

如何拨打以下电话?

var ccall="search.clearMultiSelect";

我尝试了以下内容:

  1. window[ccall]();
  2. ccall();
  3. 两者都不起作用(我明白了)。我能够通过eval实现它,但是没有使用eval还有其他方法吗?

    除了在开头或结尾添加内容之外,我无法拆分字符串或操纵字符串。

    基本上,服务器在其响应中包含操作成功时要执行的函数的名称,在这种情况下如上所述。

4 个答案:

答案 0 :(得分:3)

window[ccall]()无效,因为窗口不包含名称为“search.clearMultiSelect”的函数。如果您可以使用拆分,请尝试以下方法:

window[ccall.split('.')[0]][ccall.split('.')[1]]();

对于深度大于2的函数,您可以遍历split('.')数组:

var f = window;
var ccallArray = ccall.split('.');
for (var i = 0; i < ccallArray.length; i++){
    f = f[ccallArray[i]];
}
f();

DEMO

答案 1 :(得分:2)

您必须拥有有限数量的函数才能调用。

为了防范eval问题,您可以手动执行:

if (ccall == "search.func1") func1();
else if (ccall == "search.func2") func2();
else if ....

不是一个非常令人兴奋的答案,但它应该有效并避免评估。

这也会分离您的客户端和服务器。

服务器可以发送回search.func1,而客户端决定通过调用newfunc1()来响应,反之亦然。

答案 2 :(得分:1)

您可以沿着'。'拆分字符串。然后使用[]。

重复查找

答案 3 :(得分:-3)

您可以使用eval()。

这是一个小例子:

var myFunction = "alert('test');";
eval(myFunction);

以下是测试上述示例的链接:

http://jsfiddle.net/labzus/WzpK8/