3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
不得不說, 寫這代碼的人也太喜歡賣弄了吧, 非要寫成一行. 寫通俗點(diǎn)可以是這樣:
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);
});
}
}
}
他首先把要注冊(cè)的偵聽器作成DOM元素的一個(gè)方法, 然后當(dāng)事件觸發(fā)后用該 DOM元素調(diào)用這個(gè)方法, 我猜應(yīng)該是解決ie中事件偵聽器中的 this 指向的問題, 按理說事件觸發(fā)后, 偵聽器中的 this 是指向事件觸發(fā)那個(gè) DOM 元素的, 也許在IE 以前的某個(gè)古老的版本中 偵聽器中的 this 是亂指向的. ?
這是我的猜測(cè), 沒有具體實(shí)驗(yàn), 我在工作中還沒遇到過這種情況, 現(xiàn)在的ie 都很正常,?也許是我沒注意吧.

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
有點(diǎn)閉包的意思,這個(gè)寫的有點(diǎn)意思。寫這段代碼人,對(duì)JavaScript有一定認(rèn)識(shí)啊

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
這個(gè)閉包貌似沒關(guān)系吧?他只是如果沒有addEventListener方法,就給oElement添加一個(gè)屬性,然后把處理方法賦值給這個(gè)屬性,然后綁定事件的時(shí)候關(guān)聯(lián)這個(gè)屬性。。這只是我的個(gè)人認(rèn)為,我是菜鳥,看不出有什么好處。
添加回答
舉報(bào)