2012-02-10 15 views
0

我是JavaScript新手。同時練習我遇到關於事件處理的代碼。這裏是代碼有關Javascript中的事件處理的困惑

//This generic event handler creates an object called eventHandler 
var etHandler = {}; 

if (document.addEventListener) { 

    //eventHandler object has two methods added to it, add()and remove(), 
    etHandler.add = function(element, eventType, eventFunction) { 

     /** 
     * The add method in each model determines whether the event type is a load event, meaning that 
     * the function needs to be executed on page load. 
     */ 
     if (eventType == "load") { 

      ....... 

     } 
    };// end of eventHandler.add = function() 

    etHandler.remove = function(element, eventType, eventFunction) { 

     element.detachEvent("on" + eventType, eventFunction); 

    }; //end of etHandler.remove = function() 
} 

function sendAlert() { 

    alert("Hello"); 

} //end of sendAlert() 

function startTimer() { 

    var timerID = window.setTimeout(sendAlert,3000); 

}//end of startTimer() 

var mainBody = document.getElementById("mainBody"); 

etHandler.add(mainBody, "load", function() { 

           startTimer(); 

          } 
      ); 

我想問的問題是這個。我們創建一個空對象。 var etHandler = {};。沒關係。然後我們檢查條件if (document.addEventListener) {}。我們沒有將任何事件監聽器添加到文檔中,但是這種情況是正確的。爲什麼這種情況恢復正常? 然後我們寫etHandler.add = function(element, eventType, eventFunction) {}。爲什麼我們要寫etHandler.add?當我們創建它時,etHandler對象沒有屬性。這是一個空對象。如果我們創建etHandler這樣

var etHandler = { 

    add: function() { 

    }, 

    remove: function(){ 

    } 
}; 

然後,我們可以寫etHandler.add。 etHandler.remove也是一樣的問題。

感謝

回答

1

呼叫if (document.addEventListener)正在檢查瀏覽器是否支持這種方法。它檢查它是否存在於文檔對象上。這稱爲功能檢測,常用於檢測瀏覽器之間的差異。

調用etHandler.add = function(element, eventType, eventFunction)定義了add方法並同時創建它。它和你的例子基本相同。

+0

HHmm我讀了關於功能檢測,但在書中,它被寫入使用'typeof'進行功能檢測,如**爲了測試getElementById()方法的存在性,該方法表明 瀏覽器支持更高級的DOM接口,您可以使用以下代碼:** 'if(typeof document.getElementById!=「undefined」)alert(「getelembyid is supported」); } else {alert(「no getelembyid support」); }'。它也被寫入**您可能會試圖在測試中跳過使用typeof,並且您可能會在 網絡上看到一個示例測試如下所示的示例:** continue .... – Basit 2012-02-10 05:06:39

+0

'if(document。 getElementById){...}'。 **不幸的是,這種特徵測試方法並不像測試類型那麼可靠。問題 是較短的語法運行該方法。如果省略typeof,則測試的方法或屬性 可能會默認返回0或false,這會使測試失敗;換句話說, 顯示瀏覽器不支持該方法或屬性 - 實際上它不支持該方法或屬性。 因此,使用typeof進行測試更安全,更可靠。這就是爲什麼我勸告... – Basit 2012-02-10 05:07:10

+0

你也說過**調用etHandler.add = function(element,eventType,eventFunction)'定義add方法並同時創建它。它和你的例子基本相同。**你的意思是說在幕後,JavaScript創建這樣的東西? 'var etHandler = {add:function(){},remove:function(){}};'是嗎? – Basit 2012-02-10 05:13:44