繁体   English   中英

在node.js中记录每个函数调用而没有无限递归

[英]log every function call without infinite recursion in node.js

我创建了必须记录每个函数调用的函数。

(function () {
  var oldCall = Function.prototype.call;
  var newCall = function(self) {
    Function.prototype.call = oldCall;
    console.log('Function called:', this.name);
    Function.prototype.call = newCall;
    this.apply(self, Array.prototype.slice.call(arguments, 1));
  }
  Function.prototype.call = newCall;
})();

但是它无法堆栈溢出:

Function called: slice
Function called: slice
Function called: slice
Function called: slice
Function called: slice
Function called: slice
Function called: slice

RangeError: Maximum call stack size exceeded

如何对其进行修改以使其正常工作? 我想问题是slice也是函数,它调用了无限递归。 也许可以像这样进行过滤:

if (functionName == 'slice')
{
    return;
}

但是无法弄清楚该怎么做。

您可以在应用呼叫之前添加:

 if (this.name == 'slice')
 {
     return;
 }

要得到:

(function () {
 var oldCall = Function.prototype.call;
 var newCall = function(self) {
 if (this.name == 'slice')
 {
     return;
 }

 Function.prototype.call = oldCall;
 console.log('Function called:', this.name);
 Function.prototype.call = newCall;
 this.apply(self, Array.prototype.slice.call(arguments, 1));
 }
 Function.prototype.call = newCall;
})();

但这不是完整的解决方案,因为在我的代码中,我被困在“ TypeError:未定义不是函数”中。 检查此,self和参数是否未定义没有帮助:-(。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM