今天在网上看见这种调用,据说是解决火狐下事件或得问题的,var evt=window.event|arguments.callee.caller.arguments[0]
argument.callee就是函数本身,caller函数的调用函数.
?
?
我们把argument.callee.caller的函数体输出,看看到底在ie和ff下有何区别. 可以看到ie下输出为 ff下输出为
function?myFunc(){
??? alert(arguments.callee.caller.toString())
???var?ev?=?window.event?||?arguments.callee.caller.arguments[0]
??????? ,et?=?ev.srcElement?||?ev.target;
}
</script>
?? myFunc()
}
??? myFunc();
}
在html控件中直接注册事件在ie/ff下表现的不同, ie下定义了一个匿名函数,内部再执行用户定制的函数(myFunc),而ff下则有所 不同,首先ff下定义了一个与节点事件同名的函数,这里是onclick事件,所以是function onclick,然后event作为一个参数传入,内部再执行myFunc. 所以当事件触发时,在myFunc里,argument.callee.caller就是指向function onclick,当然,argument.callee.caller.arguments[0]即为event了.