面試的時(shí)候有點(diǎn)蒙,結(jié)束之后想想自己好像根本就誤解了面試官的問題,因?yàn)槲依斫獾倪@個(gè)問題本身就沒有意義。但是當(dāng)時(shí)已經(jīng)有一些思路,但是在一個(gè)點(diǎn)上被卡住。

結(jié)束之后腦子瞬間靈光,想出了當(dāng)時(shí)沒有邁出的那一小步。所以不想計(jì)較這個(gè)問題本身的意義,單純的想要把這個(gè)我理解錯(cuò)了的問題解決,就當(dāng)是滿足自己一個(gè)小小的愿望吧。

 

問題:

用addEventListener()和attachEvent()給一個(gè)DOM元素綁定事件處理程序時(shí),如果傳入一個(gè)匿名函數(shù),那么用相應(yīng)的removeEventListener()和detachEvent()是無法將這個(gè)匿名的處理程序解除綁定的。所以我們用的時(shí)候應(yīng)該傳入一個(gè)函數(shù)表達(dá)式。

那么,如果我就是想使用匿名函數(shù)進(jìn)行綁定和解綁,怎么解決?

 

思路:

既然這兩個(gè)函數(shù)都高冷的說明了不接受相同的匿名函數(shù)進(jìn)行解綁,那么就只能另尋出路,不能靠它來管理事件了。

所以需要一個(gè)自定義的對(duì)象來管理事件。

事件處理程序的本質(zhì)就是,當(dāng)一個(gè)事件在一個(gè)對(duì)象上發(fā)生時(shí),執(zhí)行監(jiān)聽這個(gè)事件的函數(shù)。

翻譯一下:

一個(gè)DOM元素可能被綁定多個(gè)事件類型的處理程序。比如click的時(shí)候顏色改變,mouseover的時(shí)候變大。

一個(gè)事件類型可能綁定多個(gè)事件處理程序。比如mouseover的時(shí)候又變色又變大。

所以,這個(gè)事件對(duì)象應(yīng)該有一個(gè)屬性用來存儲(chǔ)這個(gè)DOM元素上綁定的所有事件處理程序,還應(yīng)該有兩個(gè)方法,一個(gè)用來添加,一個(gè)用來刪除。

復(fù)制代碼
{
handlers:{
type1:[handler1,handler2],
type2:[handler1,handler2],
...
        		

網(wǎng)友評(píng)論