如何获取当前的Function对象引用

时间:2011-01-05 21:20:47

标签: javascript function reference

itself.bind = function (object, method, callback, context, args, includeEventArgs) {

  var handler, originalArgLen;

  args = args.slice(0, arguments.length);
  originalArgLen = args.length;
  context = context || null;

  handler = function () {
     if (includeEventArgs) {
        for (var i = arguments.length - 1; i >= 0; i--) {
           args.push(arguments[i]);
        }
     }

     callback.apply(context, args);
  };

  handler.userArgsLength = originalArgLength; 

  object[method] = handler;
};

假设我打电话

TOOL.bind(canvas, "onmouseover",  doDrawFunc, [currentDrawingTool], true); 

我希望能够从userArgsLength内访问doDrawFunc

2 个答案:

答案 0 :(得分:22)

您正在寻找arguments.callee.caller.userArgsLength

  • arguments.callee是对doDrawFunc
  • 的引用
  • .caller是调用它的函数(handler)。
  • .userArgsLength是该函数对象的属性。

修改:我不相信有任何方法可以避免arguments.callee而不更改您的主要功能。无论如何,您可能应该将回调需要访问的任何内容作为参数传递给该回调函数。您甚至可以传递handler作为参数。

答案 1 :(得分:0)

将handler.userArgsLength的赋值移动到更早的点,将其推送到apply数组堆栈,然后bam,你可以认为它是最后的参数。

不知道你为什么要使用arguments.callee;根据我的理解,如果你不小心的话,那么倒退就会变慢。