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

Kri*_*ian 21 javascript arguments callback

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

// 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 );
Run Code Online (Sandbox Code Playgroud)

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

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

Rob*_*b W 29

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

var original = callback;
callback = function() {
    // Do something with arguments:
    console.log(arguments);
    return original.apply(this, arguments);
};
Run Code Online (Sandbox Code Playgroud)
  1. 上下文this被保留.
  2. 所有参数都正确传递.
  3. 返回值正确传递.

注意:此方法适用于大多数情况.虽然存在此方法失败的边缘情况,包括:

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

  • @RobW:如果您正在谈论的注释是"注意:大多数浏览器,包括Chrome 14和Internet Explorer 9 ......",它不适用于Arguments对象.我不知道任何不接受Arguments对象的浏览器作为`.apply()`的第二个参数.*旁注,最近在Chrome中已修复,因此任何类似数组的对象都可以使用.* (2认同)
  • @gdoron:的确如此.:)仅供参考,我刚刚在IE6中验证了这一点.'.apply()`接受Arguments对象没有问题. (2认同)

Tom*_*lak 8

它会像它一样容易吗?

function callback() {
    console.log(arguments);
}
Run Code Online (Sandbox Code Playgroud)

每个函数都提供自动arguments收集中调用的参数.

  • 添加`console.log(this)`,你就可以看到本地(est)范围的完整视图. (2认同)