今天在网上看见这种调用,据说是解决火狐下事件或得问题的,var evt=window.event|arguments.callee.caller.arguments[0]
argument.callee就是函数本身,caller函数的调用函数.
<script type='text/javascript'>
function myFunc(){
alert(arguments.callee.caller.toString())
var ev = window.event || arguments.callee.caller.arguments[0]
,et = ev.srcElement || ev.target;
}
</script>
function myFunc(){
alert(arguments.callee.caller.toString())
var ev = window.event || arguments.callee.caller.arguments[0]
,et = ev.srcElement || ev.target;
}
</script>
我们把argument.callee.caller的函数体输出,看看到底在ie和ff下有何区别.
可以看到ie下输出为
function anonymous(){
myFunc()
}
myFunc()
}
ff下输出为
function onclick(event){
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了.
版权声明:本文为brtghtrd原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。