如何获取回调函数的所有参数

时间:2012-03-22 18:55:01

标签: javascript callback arguments

很多时候,我发现自己使用了一个回调函数,并且我没有方便的文档,并且很高兴看到所有要传递给该回调函数的参数。

// callback is a function that I don't know the args for...
// and lets say it was defined to be used like: callback(name, number, value)
something.doSomething( callback );

我怎样才能确定传入的args是什么?

注意:当代码本身被混淆和缩小时(如同许多js框架一样),查看源代码可能是无用的

4 个答案:

答案 0 :(得分:28)

要在不破坏功能的情况下获取参数列表,请以这种方式覆盖回调函数:

var original = callback;
callback = function() {
    // Do something with arguments:
    console.log(arguments);
    return original.apply(this, arguments);
};
  1. 保留上下文this
  2. 所有参数都已正确传递。
  3. 正确传递了返回值。
  4. 注意:此方法适用于大多数情况。虽然存在此方法失败的边缘情况,包括:

    • 只读属性(例如,使用Object.defineProperty使用writable:false
    • 定义)
    • 当getter / setter不对称时,使用getter / setter定义的属性。
    • 主机对象和插件API:例如Flash和ActiveX。

答案 1 :(得分:8)

可能就像

一样容易
function callback() {
    console.log(arguments);
}

每个函数都提供在自动arguments集合中调用它的参数。

答案 2 :(得分:1)

这种推车不是这种马吗?

您的函数需要回调。这是使用你的函数的方法,它应该知道回调应该接受什么参数。

答案 3 :(得分:0)

你甚至可以告诉它使用[functionName]来获取哪个函数的args .arguments:

(function(arg1, arg2, agr3){
    console.log('args are:', arguments);
    return function fn(){
        function m(){
            console.log(
                'fn.arguments:', fn.arguments,
                'm.arguments:', m.arguments,
                'argumentsX:', arguments
            );
        };
        m('mArg1', 'mArg2', 'mArg3', 'mArg4');
    };
})
(1, 2, Math.PI)  // invoke closure
('fnArg1', 'fnArg2', 'fnArg3', 'fnArg4');  // invoke "fn"

每个函数def都会将arguments关键字重写为该范围的btw(如“argumentsX”日志所示)。