Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跟踪JavaScript中的函数调用_Javascript - Fatal编程技术网

跟踪JavaScript中的函数调用

跟踪JavaScript中的函数调用,javascript,Javascript,有没有一种好方法可以跟踪JavaScript中调用的函数?目前,我能想到的唯一方法是保留全局数组以存储调用的函数,并在每个函数中在每次调用时将函数名和参数值附加到数组中 比如说 var functionCalls = []; var functionIndex = 0; function func1(param1, param2, ... , paramN) { ... functionCalls[functionIndex] = [func1, param1, param2,

有没有一种好方法可以跟踪JavaScript中调用的函数?目前,我能想到的唯一方法是保留全局数组以存储调用的函数,并在每个函数中在每次调用时将函数名和参数值附加到数组中

比如说

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