2010-01-01 54 views
3

试图很难在不使用函数构造函数的情况下替换eval。难住了。我不是新手,但也不是专家。想要避免评估与函数构造函数

jslint说这是邪恶的;当我用Function构造函数替换它时,它说这只是eval()的一种形式!

evaluateEventScript: function(requestObject) { 
     var resultData; 
     resultData = eval(requestObject.script); 
     //send resultData elsewhere... 
    } 

帮助??

+3

你想解决什么问题?请澄清你的问题是什么。 – 2010-01-01 21:16:06

+0

'requestObject.script'中有什么?我假设要执行一个JavaScript块,但它是一个函数,AJAX请求的结果等等? – 2010-01-01 21:22:59

+0

在这个时候,我不确定requestObject.script中JS代码的细节。很可能这是一些JSON,因为这是常用的代码(我刚刚继承)。 – Dave 2010-01-02 01:32:29

回答

3

你不能简单地在你的场景中传递一个函数对象吗? 例如

var c = function(){ 
    ... 
} 


var evaluateEventScript = function(requestObject) { 
    var resultData; 
    resultData = requestObject(); 
    //send resultData elsewhere... 
} 

evaluateEventScript(c); 

或者这种形式的东西?这可以在没有eval或Function构造函数的情况下工作。但它要求requestObject是一个函数对象,而不是一个String。

+0

>“那么eval是你的第一个赌注......”好吧,有时候可以忽略jslint的eval是邪恶的建议吗?许多网站甚至说“总是有一种方法来避免评估,你应该”,但是他们没有解释如何。也许是时候投资一本好的JS书,而不是用Google搜索答案。这个论坛真的很酷 - 我正在寻找我可以回答的问题,以回馈。 – Dave 2010-01-02 01:34:45

+0

我会检查,看看我是否可以在这里使用闭包,而不是你的建议。如果我只是想用我提供的上下文替换eval,我仍然会对规定的技术感兴趣。提前致谢。 – Dave 2010-01-02 01:48:22

+0

@Dave校正,eval永远是邪恶的。你是对的,编辑答案。 – 2012-09-13 01:08:00