logging每个函数调用,而无需在node.js中进行无限recursion

我创build了必须logging每个函数调用的函数。

(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也是函数,它调用无限recursion。 也许有可能过滤如下:

 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; })(); 

但它不是一个完整的解决scheme,因为在我的代码我卡在“TypeError:undefined不是一个函数”。 检查这个,自我和未定义的参数没有帮助:-(。