как получить текущую ссылку на объект функции - PullRequest
20 голосов
/ 06 января 2011
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 ]

22 голосов
/ 06 января 2011

Вы ищете arguments.callee.caller.userArgsLength.

  • arguments.callee является ссылкой на doDrawFunc.
  • .caller - это функция, которая вызвала его (handler).
  • .userArgsLength является свойством этого функционального объекта.

Редактировать: Я не верю, что есть какой-либо способ избежать arguments.callee без изменения вашей основной функции. Вы, вероятно, в любом случае должны передавать все, что требуется для обратного вызова, в качестве аргумента этой функции обратного вызова. Вы можете даже передать handler в качестве аргумента.

0 голосов
/ 06 января 2011

Переместите присвоение handler.userArgsLength в более раннюю точку, поместите его в стек примененных массивов и нажмите bam, вы можете предположить, что это последний аргумент.

Не знаю, почему вы все равно хотите использовать arguments.callee; из того, что я понимаю, движение назад в обратном направлении может стать очень медленным, если вы не будете осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...