1. 程式人生 > >你是如何理解var e=e||window.event的------Day26

你是如何理解var e=e||window.event的------Day26

你是如何理解var e=e||window.event的?相信很多人都能給我個回答說是:為了實現多種瀏覽器相容。

不錯,確實是為了實現瀏覽器相容,但是它又是如何實現瀏覽器相容的呢?

其實,如果把他寫全的話,就好理解多了吧。

function(event){

var e=event?event||window.event;

}

這樣來看的話,相信粗懂java的人都會知道了,如果存在event,那麼var e=event;而如果不存在event,那麼var e=window.event.這樣的話我們就可以從字面上理解了個公式的意思,也能大體猜到的確能夠實現相容的。

但是我們再來細挖一下,它在究竟在什麼瀏覽器下等於什麼呢,又是為什麼呢?我們先附上一個神圖:


首先:我們進行ie和其他瀏覽器的判斷

ie的document物件有一個all屬性,它的裡面存放了頁面的所有標籤,而其它瀏覽器是沒有的,所以在ie中,事件物件的傳播會繫結在全域性的windows上,所以ie瀏覽器肯定是都支援window.event的

其次:特殊的firefox

firefox只支援事件物件作為引數傳入,而這又恰恰是ie6/ie7/ie8所無法實現的,所以可以成功的區分這兩類,寫個例項進行測試的話,如下:

var btn = document.getElementById('btn');//一個按鈕
btn.onclick = function(event){//給btn繫結一個點選事件
  //其他瀏覽器會在點擊發生的時候,把事件物件當作引數傳遞過來
  alert('其他瀏覽器:' + event);
  //在ie瀏覽器中,這個event變數是空,它會在全域性的window上
  alert('ie瀏覽器:' + window.event);
}
最後,就是ie9/chrome/opera/safari,則兩種方式都支援,僅憑這點很難判定瀏覽器型別

但是,只要寫上var e=event?event||window.event,我們的確是可以保證各瀏覽器的相容的,你說對麼

最近專案開始加速啊,累死啊,要睡了