最近在寫js的類庫,模仿的是jquery的編程風格,當封裝到事件監聽的時候發現遇到了一個問題,代碼是這樣的:
上面是封裝的一個事件委托的代碼,我以為上面的封裝跟普通的事件監聽一樣簡單,結果我在調用時發現報錯:
為什么會報這樣的錯,原來是不同於單一的onclick之類的事件,這邊的this指向的是調用addEventListenner的的對象;
為了簡化問題,我們將其拿到全局范圍中單獨去測試:
發現這里的this指向的就是div標簽,這就是為什么在原型中調用$(this)會出錯
因為是執行的上下文不同,所以我們這邊只要想辦法改變this的指向就行了,我們需要的是讓事件指向事件觸發源
如上調用一下call()使得this指向ev.srcElement