Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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_Function_Reference - Fatal编程技术网

Javascript 如何获取当前函数对象引用

Javascript 如何获取当前函数对象引用,javascript,function,reference,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

如果我打电话

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;
};

我希望能够从
doDrawFunc
中访问
userArgsLength

您正在查找
参数.callee.caller.userArgsLength

  • 是对
    doDrawFunc
    的引用
  • 是调用它的函数(
    处理程序
  • .userArgsLength
    是该函数对象的属性

Edit:我认为没有任何方法可以避免
参数。被调用方
不更改主函数。无论如何,您可能应该将回调需要访问的任何内容作为参数传递给该回调函数。您甚至可以将
handler
作为参数传递。

将handler.userArgsLength的赋值移到较早的点,将其推到应用数组堆栈上,然后bam,您可以假定它是最终参数


不知道为什么要使用arguments.callee;据我所知,如果你不小心的话,像那样向后移动会变得非常慢。

谢谢你的回答;但是,arguments.callee在某些javascript实现中不推荐使用。是否有方法避免以下JSLint错误:第42行的问题字符7:avoid arguments.callee。arguments.callee.caller.matchCase=matchCase@user562688:将回调中需要的任何内容传递到函数参数中。在发布问题之前,我考虑过这个答案,但这对我不起作用:我不希望这个库的用户对额外的参数感到惊讶。例如,我希望用户能够将函数绑定为myFunc(expectedArg1,expectedArg2,…)而不是myFunc(userArgsLength,expectedArg1,expectedArgs2,…)。另外,我不想使用callee,因为它在某些版本的javascript中已被弃用。有没有办法做我想做的事
TOOL.bind(canvas, "onmouseover",  doDrawFunc, [currentDrawingTool], true);