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
。
答案 0 :(得分:22)
您正在寻找arguments.callee.caller.userArgsLength
。
arguments.callee
是对doDrawFunc
。.caller
是调用它的函数(handler
)。.userArgsLength
是该函数对象的属性。 修改:我不相信有任何方法可以避免arguments.callee
而不更改您的主要功能。无论如何,您可能应该将回调需要访问的任何内容作为参数传递给该回调函数。您甚至可以传递handler
作为参数。
答案 1 :(得分:0)
将handler.userArgsLength的赋值移动到更早的点,将其推送到apply数组堆栈,然后bam,你可以认为它是最后的参数。
不知道你为什么要使用arguments.callee;根据我的理解,如果你不小心的话,那么倒退就会变慢。