使用字符串调用函数而不使用eval()

时间:2014-10-17 11:56:31

标签: javascript

我想将一个字符串传递给一个函数,然后该函数将该字符串用作回调函数。 e.g。

app.on('notice', function(data) {

    var callback = data.func; // this is a string
    eval(callback + "()"); // trun string into an executable function

});

但是我在一个阻止使用eval()的环境中使用它...如何在没有eval的情况下重写它?

我试过了:

var self = this; 
return function(){ self[callback]() };

但它没有调用该函数(我没有收到任何错误)

更新:我忘记了我还需要处理参数:

e.g。

var params = ['param1', 'param2'];

eval(callback + "("+ params +")");

2 个答案:

答案 0 :(得分:7)

使用window对象。 将您的eval()来电替换为:

window[callback]();

答案 1 :(得分:2)

您可以使用Function构造函数。

var func = new Function("console.log('i am a new function')");
func();