我是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也是一樣的問題。
感謝
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
'if(document。 getElementById){...}'。 **不幸的是,這種特徵測試方法並不像測試類型那麼可靠。問題 是較短的語法運行該方法。如果省略typeof,則測試的方法或屬性 可能會默認返回0或false,這會使測試失敗;換句話說, 顯示瀏覽器不支持該方法或屬性 - 實際上它不支持該方法或屬性。 因此,使用typeof進行測試更安全,更可靠。這就是爲什麼我勸告... – Basit 2012-02-10 05:07:10
你也說過**調用etHandler.add = function(element,eventType,eventFunction)'定義add方法並同時創建它。它和你的例子基本相同。**你的意思是說在幕後,JavaScript創建這樣的東西? 'var etHandler = {add:function(){},remove:function(){}};'是嗎? – Basit 2012-02-10 05:13:44