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

时间:2014-04-10 04:32:52

标签: javascript 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;
})();

但它没有stackoverflow:

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

但无法弄清楚究竟如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以在应用通话前添加:

 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:undefined不是一个函数”。 检查这个,自定义和未定义的参数没有帮助: - (。