abstract:自定義事件:用戶可以指定事件類型,這個類型實際上就是一個字符串,然后為這個類型的事件指定事件處理函數(shù),可以注冊多個事件處理函數(shù)(用數(shù)組管理),調用時,從多個事件處理函數(shù)中找到再調用。function EventTarget(){ this.han
自定義事件:用戶可以指定事件類型,這個類型實際上就是一個字符串,然后為這個類型的事件指定事件處理函數(shù),可以注冊多個事件處理函數(shù)(用數(shù)組管理),調用時,從多個事件處理函數(shù)中找到再調用。
function EventTarget(){ this.handlers={}; } EventTarget.prototype={ constructor:EventTarget, addHandler:function(type,handler){ if(typeof this.handlers[type]=='undefined'){ this.handlers[type]=new Array(); } this.handlers[type].push(handler); }, removeHandler:function(type,handler){ if(this.handlers[type] instanceof Array){ var handlers=this.handlers[type]; for(var i=0,len=handlers.length;i<len;i++){ if(handler[i]==handler){ handlers.splice(i,1); break; } } } }, trigger:function(event){ if(!event.target){ event.target=this; } if(this.handlers[event.type] instanceof Array){ var handlers=this.handlers[event.type]; for(var i=0,len=handlers.length;i<len;i++){ handlers[i](event); } } } }
addHandler方法用于添加事件處理程序,removeHandler方法用于移除事件處理程序,所有的事件處理程序在屬性handlers中統(tǒng)一存儲管理。調用trigger方法觸發(fā)一個事件,該方法接收一個至少包含type屬性的對象作為參數(shù),觸發(fā)的時候會查找handlers屬性中對應type的事件處理程序。寫段代碼測試一下。
function onClose(event){ alert('message:'+event.message); } var target=new EventTarget(); target.addHandler('close',onClose); //瀏覽器不能幫我們創(chuàng)建事件對象了,自己創(chuàng)建一個,自定義事件對象的屬性 var event={ type:'close', message:'Page Cover closed!' }; target.trigger(event);