摘要:事件定義事件是與交互的最常見的方式但它也可以用于非代碼中通過實現自定義事件實現自定義事件的原理是創建一個管理事件的對象如下代碼是事件的定義存儲事件處理程序由個鍵值對組成鍵表示事件名值是一個由事件處理程序組成的數組添加事件觸發事件將傳遞給
事件定義
事件是與DOM交互的最常見的方式,但它也可以用于非DOM代碼中--通過實現自定義事件.實現自定義事件的原理是創建一個管理事件的對象.如下代碼是事件的定義:
function EventTarget(){ this.handlers = {};//存儲事件處理程序,由n個鍵值對組成,鍵表示事件名,值是一個由事件處理程序組成的數組 } EventTarget.prototype = { constructor:EventTarget, //添加事件 addHandler:function(type,handler){ if(typeof this.handlers[type] == "undefined"){ this.handlers[type] = []; } this.handlers[type].push(handler); }, //觸發事件 fire: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++){ //將event傳遞給事件處理程序,event.target代表對象本身, event.type代表事件名,你可以根據情況為添加event屬性 handlers[i](event); } } }, //移除事件 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(handlers[i] == handler){ break; } } handlers.splice(i,1); } } };
首先是定義了一個名為EventTarget的構造函數,為其定義的屬性handlers用于存儲事件處理程序,
然后有三個操作方法添加到EventTarget的原型中,分別是addHandler fire remocveHander.
addHander是向handlers中添加事件處理程序
fire是觸發handlers中的事件處理程序
removeHandler是向handlers中移除事件處理程序
注:事件處理程序通俗的講就是事件被觸發時需要執行的方法.
var eventObj=new EventTarget(); //實例化一個EventTarget類型 var handler=function(){ alert("event"); }; //事件處理程序 eventObj.addHandler("alert",handler); //為eventObj對象添加一個事件處理程序`handler` event.fire({type:"alert"}); //觸發eventObj對象中的事件處理程序`handler` event.removeHandler("alert",handler); //刪除eventObj對象中的事件處理程序`handler`事件繼承
當然我們也可以通過繼承讓其他引用類型繼承EventTarget的屬性和方法.
//原型式繼承 var object=function(o){ function F(){} F.prototype=o; return new F(); }; //subType繼承superType的原型對象 var inheritPrototype=function(subType,superType){ var prototype=object(superType.prototype); prototype.constructor=subType; subType.prototype=prototype; } function Person(name,age){ EventTarget.call(this);//繼承EventTarget的屬性 this.name = name; this.age = age; } inheritPrototype(Person,EventTarget);//繼承EventTarget的方法 Person.prototype.say=function(message){ this.fire({type:"message",message:message}); //觸發事件 }; //事件處理程序 var handMessage=function(event){ alert(event.target.name + "says:" + event.message); }; var person=new Person("yhlf",29); person.addHandler("message",handMessage); person.say("Hi there");
使用自定義事件有助于解耦相關對象,保持功能的隔絕,在很多情況下,觸發事件的代碼和監聽事件的代碼是完全分離的.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85990.html
摘要:首先來看看什么是自定義事件讓函數能夠具備事件的某些特性。其實自定義事件在一些主流的類庫中都有實現,后續會分析具體的實現方法。今天,我們就先用簡單的例子來實現自定義事件的功能。 在團隊協作的很多情況下,某個js的函數會根據不斷增加的需求進而不斷增加功能,如果功能需求累積過多,我們就很難把控自己在這個函數中新定義的變量會不會覆蓋掉之前的定義。如: function action(){ ...
摘要:我們就需要我們自己去定義事件其實就是我們寫的函數,尤其是組件開發過程中,用的尤為多??赡苡写_定按鈕取消按鈕等操作。但是自定義事件的基本原理就是如上描繪的那樣 我們都知道,鼠標點擊click,觸屏的touch等事件,可以觸發相應的事件處理程序,也可以為這些事件添加事件處理程序,實際開發過程中可供我們使用的事件很少,click、doubleclick,mouseover、mousemove...
摘要:支持三個參數分別表示事件名稱,是否可以冒泡,是否阻止事件的默認操作觸發參數表示事件對象,是方法返回的創建的對象監聽方法自定義事件常用模擬模擬方法操作或者自定義事件我的自定義事件。 事件這塊知識點雖然是老生長談的,但對于我來說多多整理,多多感悟,溫故知新,每次看看這塊都有不同的收獲.(在這里我不會長篇大論,只會挑重點;具體的小伙伴們自行查找) 什么是事件 在編程時系統內發生的動作或者發生...
摘要:支持三個參數分別表示事件名稱,是否可以冒泡,是否阻止事件的默認操作觸發參數表示事件對象,是方法返回的創建的對象監聽方法自定義事件常用模擬模擬方法操作或者自定義事件我的自定義事件。 事件這塊知識點雖然是老生長談的,但對于我來說多多整理,多多感悟,溫故知新,每次看看這塊都有不同的收獲.(在這里我不會長篇大論,只會挑重點;具體的小伙伴們自行查找) 什么是事件 在編程時系統內發生的動作或者發生...
閱讀 1536·2023-04-26 02:08
閱讀 3128·2021-10-14 09:42
閱讀 7177·2021-09-22 15:34
閱讀 3236·2019-08-30 13:16
閱讀 2718·2019-08-26 13:49
閱讀 1342·2019-08-26 11:59
閱讀 1251·2019-08-26 10:31
閱讀 2170·2019-08-23 17:19