跟踪JavaScript中的函数调用
有没有一种好方法可以跟踪JavaScript中调用的函数?目前,我能想到的唯一方法是保留全局数组以存储调用的函数,并在每个函数中在每次调用时将函数名和参数值附加到数组中 比如说跟踪JavaScript中的函数调用,javascript,Javascript,有没有一种好方法可以跟踪JavaScript中调用的函数?目前,我能想到的唯一方法是保留全局数组以存储调用的函数,并在每个函数中在每次调用时将函数名和参数值附加到数组中 比如说 var functionCalls = []; var functionIndex = 0; function func1(param1, param2, ... , paramN) { ... functionCalls[functionIndex] = [func1, param1, param2,
var functionCalls = [];
var functionIndex = 0;
function func1(param1, param2, ... , paramN) {
...
functionCalls[functionIndex] = [func1, param1, param2, ..., paramN];
functionIndex++;
}
function func2(param1, param2, ... , paramN) {
...
functionCalls[functionIndex] = [func2, param1, param2, ..., paramN];
functionIndex++;
}
有更好的方法吗?谢谢如果你想对你的代码进行某种分析,考虑使用外部工具/库,而不是硬编码到你的应用程序中。 显示了在运行时注入插装以跟踪函数调用等的可能性 编辑:在阅读您解释此问题意图的评论后: 您可以创建一个decorator函数,只需传递一个作用域、函数、参数和ID(稍后再调用) 然后我们可以使用如下函数:
// this function exists just to call our real function
// below with our instrumentation
function func1() {
callFunction(this, _func1, arguments, 'someId');
}
// we designate the original as a "private" function that
// actually contains the implementation
function _func1(param1, param2, ... , paramN) {
...
}
func1(a, b, c, d, e...);
callFunction('someId'); // recall the previous func1 call
注意:上述代码中可能存在语法/语言错误;它是用来作为指导的看起来你可能走错了路,但这里有一个方法:
Function.prototype.track = function() {
var fn = this;
return function() {
//do tracking here
console.log(arguments)
return fn.apply(this, arguments);
}
}
//You don't have to make it a method on all functions
//I never add to prototypes of native Objects but it
//does look more elegant for this scenario.
例如:
function sum(a, b) {
return a + b;
}
var sumTracker = sum.track();
var onePlusTwo = sumTracker(1,2)
> [1, 2]
onePlusTwo
> 3
为什么需要跟踪函数调用?如果您正在调试,只需单步调试一个调试器。@ZZZBOV不用于调试,但我希望跟踪所有调用的函数及其参数,以便稍后以相同的顺序再次使用相同的参数重新执行部分函数。
function sum(a, b) {
return a + b;
}
var sumTracker = sum.track();
var onePlusTwo = sumTracker(1,2)
> [1, 2]
onePlusTwo
> 3