我创建了必须记录每个函数调用的函数。
(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;
}
但无法弄清楚究竟如何做到这一点。
答案 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不是一个函数”。 检查这个,自定义和未定义的参数没有帮助: - (。