如何使用JavaScript中的参数调用匿名函数(存储在字符串中)?

Rop*_*tah 1 javascript jquery

我在JavaScript中有以下情况:

<a onclick="handleClick(this, {onSuccess : 'function() { alert(\'test\') }'});">Click</a>
Run Code Online (Sandbox Code Playgroud)

handleClick函数接收第二个参数作为对象,其onSuccess属性包含函数定义...

如何调用onSuccess函数(存储为字符串) - 并传递otherObject给该函数?(jQuery解决方案也很好......)?

这是我到目前为止所尝试的......

function handleClick(element, options, otherObject) {
    options.onSuccess = 'function() {alert(\'test\')}';

    options.onSuccess(otherObject); //DOES NOT WORK
    eval(options.onSuccess)(otherObject); //DOES NOT WORK
}
Run Code Online (Sandbox Code Playgroud)

Sho*_*og9 6

你真的不需要这样做.我的意思是将函数作为字符串传递.JavaScript函数是第一类对象,可以直接传递:

<a onclick="handleClick(this, {onSuccess : function(obj) { alert(obj) }}, 'test');">
  Click
</a>
Run Code Online (Sandbox Code Playgroud)

...

function handleClick(element, options, otherObject) {
    options.onSuccess(otherObject); // works...
}
Run Code Online (Sandbox Code Playgroud)

但如果你真的想按照自己的方式去做,那么cloudhead的解决方案就可以了.

  • @ropstah:不确定为什么你要尝试通过JSON传递函数定义...除非你实际上是在服务器端实时生成这些函数,否则你可能要考虑将函数库放在一起然后只是*在JSON中命名*.然后,您可以在不使用eval()的情况下查找所需的功能 (2认同)