Как получить текущую ссылку на объект объекта
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
.
Ответы
Ответ 1
Вы ищете arguments.callee.caller.userArgsLength
.
-
arguments.callee
является ссылкой на doDrawFunc
.
-
.caller
- это функция, которая его вызвала (handler
).
-
.userArgsLength
является свойством этого объекта функции.
Изменить: Я не верю, что есть способ избежать arguments.callee
без изменения вашей основной функции. Вы, вероятно, должны проходить все, что требуется для обратного вызова в качестве аргумента для этой функции обратного вызова. Вы даже можете передать handler
в качестве аргумента.
Ответ 2
Переместите назначение handler.userArgsLength в более раннюю точку, вставьте его в стек массива apply и bam, вы можете считать его окончательным аргументом.
Не уверен, почему вы все равно хотите использовать аргументы. из того, что я понимаю, обход назад, как будто, может стать очень медленным, если вы не будете осторожны.