javascript - 在 Node.js 中记录每个函数调用,而不进行无限递归

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

但不知 Prop 体该怎么做。

最佳答案

您可以在应用调用之前添加:

 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 和参数是否未定义没有帮助:-(。

关于javascript - 在 Node.js 中记录每个函数调用,而不进行无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978706/

相关文章:

javascript - 如何不重复自己并改进我的应用程序布局对象?

node.js - Forever, NVM, Nodejs with Crontab, app 抛出错误

node.js - 静态文件未加载到我的项目中

javascript - 来自 NodeJS 的 Angular-Cli

javascript - 使用 CSS3 调整大小属性拆分 Pane

javascript - 如何在 'useEffect' 钩子(Hook)中获取最新的组件变量值?

javascript - 添加选项以在指定索引处进行选择(使用标签)

javascript - react 门户 : host multiple inside same domNode parent?

node.js - 我无法向服务器发送数据,也不能,也没有从服务器接收数据

javascript - jade/pug 中另一个元素内带有 id 的元素