Подтвердить что ты не робот

Как получить текущую ссылку на объект объекта

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.

4b9b3361

Ответ 1

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

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

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

Ответ 2

Переместите назначение handler.userArgsLength в более раннюю точку, вставьте его в стек массива apply и bam, вы можете считать его окончательным аргументом.

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