Oli*_*vvv 0 javascript overriding eval
我想计算在我们的javascript应用程序中对eval进行的调用次数.
我想出了以下内容,但它会产生错误.这些错误很难跟踪,而且我对应用程序的了解有限.
你能告诉我的代码有什么问题吗?
increment = function (){
var me = arguments.callee;
if (!me.count) me.count = 0;
return ++me.count;
}
var oldEval = eval;
eval = function eval(string){
console.log('eval number ', increment());
return oldEval(string);
}
Run Code Online (Sandbox Code Playgroud)
或者你知道另一种计算eval使用的方法吗?
谢谢
奥利维尔
不幸的是,没有一种模拟/包装eval的防水方法,因为它不是正常的功能.它可以访问(读取和写入)直接调用者的局部变量.
function testeval() {
var a= 2;
eval('a*= 2');
alert(a); // 4
};
Run Code Online (Sandbox Code Playgroud)
这是您无法通过本机JavaScript函数模拟的魔力.您无法从myWrappedEval获取a调用者的值或写回更改的值.虽然您可以使用调用函数arguments.caller,但是无法读取函数调用的局部函数.
您必须在源的increment每次使用之前手动插入呼叫eval.或者,更好的是,删除每个调用eval并用更好的代码替换它,使调用总数为零.;-)