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

时间:2009-06-11 22:40:11

标签: javascript jquery

我在JavaScript中遇到以下情况:

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

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
}

3 个答案:

答案 0 :(得分:6)

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

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

...

function handleClick(element, options, otherObject) {
    options.onSuccess(otherObject); // works...
}

但如果真的希望按照自己的方式行事,那么cloudhead's solution就可以了。

答案 1 :(得分:1)

试试这个:

 options.onSuccess = eval('function() {alert(\'test\')}');
 options.onSuccess(otherObject);

答案 2 :(得分:0)

当我在虚拟变量中添加一个赋值时,它只适用于我的FF:

 options.onSuccess = 'dummyVariable = function(x) {alert("x=" + x);}';
 f = eval(options.onSuccess);
 f(5);