当前位置: 代码迷 >> Web前端 >> arguments.callee.caller.arguments[零]
  详细解决方案

arguments.callee.caller.arguments[零]

热度:568   发布时间:2012-10-24 14:15:58.0
arguments.callee.caller.arguments[0]

今天在网上看见这种调用,据说是解决火狐下事件或得问题的,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>

我们把argument.callee.caller的函数体输出,看看到底在ie和ff下有何区别.

可以看到ie下输出为

function?anonymous(){
?? myFunc()
}

ff下输出为

function?onclick(event){
??? 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了.

  相关解决方案