js addEventListener和attachEvent函數中的this的指向問題及解決方法

這篇文章主要講解addEventListener和attachEvent函數中的this的指向問題,以及如何解決,若你還不是很瞭解它們的兼容性請點擊這裏,再往下看,這裏不做詳細介紹。
首先來看兩段代碼:

    //這是一個使用addEventListener函數的代碼片段
    obj.addEventListener('click',function(){
        console.log(this);//this指向obj
    },false);

    //這是一個使用attachEvent函數的代碼片段
    obj.attachEvent('onclick',function(){
        console.log(this);//this指向window
    });

一個特別讓人容易產生誤解的地方就是:誤以爲this的指向跟addEventListener函數一樣,也是指向obj,然而並不是,attachEvent函數居然指向window,從而產生在調試舊版本ie(ie8及以下)時使用this發生一些莫名奇妙的錯誤。
那該怎麼辦呢?在這裏也提供一個方法去解決這個問題:

    //這是一個使用addEventListener函數的代碼片段
    obj.addEventListener('click',function(e){
        console.log(this);//this指向obj
        console.log(e.target);//obj
    },false);

    //這是一個使用attachEvent函數的代碼片段
    obj.attachEvent('onclick',function(e){
        console.log(this);//this指向window
        console.log(e.srcElement);//obj
    });

e.target和e.srcElement的兼容性請自行百度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章