面試的時候有點蒙,結(jié)束之后想想自己好像根本就誤解了面試官的問題,因為我理解的這個問題本身就沒有意義。但是當(dāng)時已經(jīng)有一些思路,但是在一個點上被卡住。

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

 

問題:

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

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

 

思路:

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

所以需要一個自定義的對象來管理事件。

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

翻譯一下:

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

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

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