如何在不使用eval的前提下调用函数?

3

我有一个附加在 DIV 上的对象,作为 data。我还有一个包含该对象函数名称的字符串。

function callFunction(divId, funcName, data) {
  o = $(divId).data('myObject');
  // how do I call o.funcName(data) ???

// Somewhere else...
callFunction('#myDivId', "myFunction", someData);
和实际上来自页面上的Java小程序,这就是它们为什么是字符串的原因。

你必须使用eval()将字符串转换为对象,否则它只是一个字符串。但要注意eval()的安全问题。 - cusimar9
1
我认为你想要 o[funcName](data) - pimvdb
2个回答

4

假设这是一个全局函数:

window['foo']()

是相同的
foo()

1
这不是一个全局函数。它在一个悬挂在 DIV 上的对象上。请参见上面的 o = $(divId).data('myObject') - edoloughlin
1
在这种情况下:the_div['foo']() - Quentin

1

这取决于您的函数作用域。如果它附加到窗口,您可以这样做;

<script>
    var my_dynamic_function = function(param) {
        alert(param);
    };

    var callFunction = function(divId, funcName, data) {
        ...
        window[funcName]('PARAM!');
    };

    ...

    callFunction('#myDivId', 'my_dynamic_function', data);
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接