3 回答

TA贡献1853条经验 获得超18个赞
不得不说, 写这代码的人也太喜欢卖弄了吧, 非要写成一行. 写通俗点可以是这样:
var EventUtil = {
addHandler: function(oElement, sEvent, fnHandler){
if(oElement.addEventListener){
oElement.addEventListener(sEvent, fnHandler, false);
}
else{
oElement['__'+ sEvent] = fnHandler;
oElement.attachEvent('on'+ sEvent, function(evt){
oElement['__'+ sEvent](evt);
});
}
}
}
他首先把要注册的侦听器作成DOM元素的一个方法, 然后当事件触发后用该 DOM元素调用这个方法, 我猜应该是解决ie中事件侦听器中的 this 指向的问题, 按理说事件触发后, 侦听器中的 this 是指向事件触发那个 DOM 元素的, 也许在IE 以前的某个古老的版本中 侦听器中的 this 是乱指向的.
这是我的猜测, 没有具体实验, 我在工作中还没遇到过这种情况, 现在的ie 都很正常, 也许是我没注意吧.

TA贡献1821条经验 获得超4个赞
这个闭包貌似没关系吧?他只是如果没有addEventListener方法,就给oElement添加一个属性,然后把处理方法赋值给这个属性,然后绑定事件的时候关联这个属性。。这只是我的个人认为,我是菜鸟,看不出有什么好处。
添加回答
举报