计算对eval的调用

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使用的方法吗?

谢谢

奥利维尔

bob*_*nce 5

不幸的是,没有一种模拟/包装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并用更好的代码替换它,使调用总数为零.;-)