js自訂事件及事件互動原理概述(二)_javascript技巧
js自訂事件(一)的目的只是讓大家簡單的理解自定事件是如何模擬出來的,大家不難發現會有很多缺陷,比如:
1、此事件物件只能註冊一個事件,不能提供多個事件
2、註冊方法沒有回傳的一些資訊
下面我們就來解決這些問題。如下為MyEvent.js原始碼:
functionEvent( {
this.handlers={};
}
MyEvent.prototype={
addHandler:function(type,handler)
{
if(typeof this.handlers[type] =="undefined")
{
this.handlers[type]=[];
}
this.handlers[type].push(handler);
},
fire:function(event)
{if(this.handlers[event.type] instanceof Array)
{
var handlers=this.handlers[event.type];
for(var i= 0, len=handlers.length;i
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
if(handlers[i]===handler)
{
break;
}
}
handlers. splice(i,1);
}
}
};
這類就是第一篇的最佳化。
屬性handler變成了handlers,變成了一個陣列
addHandler()方法接受兩個參數:事件類型和用於處理該事件的函數。當方法呼叫時,會進行一次檢查,看看handlers屬性中是否已經存在一個針對該事件類型的陣列
;如果沒有,則建立一個新的。然後使用push()將該處理程序加入到陣列的末尾。
fire()方法用來觸發一個事件,該方法接受一個參數,是一個至少包含type屬性的對象,不然無法確定handlers裡面是否已經存在。它會透過此type去尋找對應該事件類型的一組處理程序,呼叫各個函數,並給出event物件。因為這些都是自訂對象,所以event對像上面的其他東西可以由你自己定義。
removeHandler()方法時addHandler()的輔助,它們接受的參數一樣:事件的類型和事件處理程序。這個方法搜尋事件處理程序的陣列找到要刪除的處理程序的位置。如果找到了,則使用break運算子退出迴圈。然後使用splice()方法將該項目從陣列中刪除。
這裡使用方式我們換一種比較長用的形式,現在據我說知很多產品在使用事件上有兩種方式,一種是直接繼承(js本省沒有此概念,不過我們可以透過原型鏈模擬出繼承的效果,此處不做詳細解釋)此事件對象,那麼就會擁有了這些行為,不過此方法比較局限,另一種方式更常用一些,就是需要使用事件的類別上面創建一個屬性用於存放此物件。如:子相同目錄下再建立一個Student.js文件,裡面的程式碼如下:
function Student(name)
{
this.myEvent=new MyEvent();
this.name=name;
}
Student.prototype={
setName:function(name)
{
var eventStart={
type:"changeNameStart",
newName:name,
oldName:this.name
};
this.myEvent.fire(eventStart);
this.name=name;
}
}
這裡有一個學生類,建構子裡面初始化一個MyEvent物件作為屬性,透過參數初始化name屬性。
提供一個方法setName用來改變名字,不過在改變名字之前設定了可能觸發事件changNameStart的監聽。
建立一個html頁面,放於同目錄下,程式碼如下:
這樣使用起來就會很方便,也是常用的使用方式。
一般在真正的專案裡面使用使用事件時我們還需要做一些最佳化,例如:
1、使用者並不知道我們提供了哪些事件,從程式碼來看好像什麼事件都可以加入到handlers裡面,但是真正起效果的(我們設定fire()方法的地方)事件我們並不能從程式碼裡面很直觀的看出來,一般做產品,在這方面都需要再做考慮。
2、有沒有發現fire的參數event好像沒用固定,在大興項目裡面,最好event也做成一個類型,在fire的地方就比較方便使用一些,event可能會有很多種類型,那時可能fire裡面會出現一些判定了。
希望對初入js事件的讀者有幫助,互相交流。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在win11系統中,我們可以透過開啟分割畫面互動來讓多個顯示器使用同一款系統,共同操作,但是很多朋友不知道分割畫面互動怎麼開啟,其實只要在系統設定中找到顯示器就可以了,下面一起來學習一下吧。 win11分割畫面互動怎麼開啟1、點選開始選單,找到其中的「設定」2、然後在其中找到「系統」設定。 3.進入系統設定後,在左側選擇「顯示」4、接著在右邊的多顯示器中選擇「擴充這些顯示器」即可。

Vue3+TS+Vite開發技巧:如何與後端API進行互動引言:在網頁應用程式開發中,前端與後端之間的資料互動是一個非常重要的環節。 Vue3作為一種流行的前端框架,與後端API互動的方式也有很多種。本文將介紹如何使用Vue3+TypeScript+Vite開發環境來與後端API進行交互,並透過程式碼範例加深理解。一、使用Axios發送請求Axios是

Vue.js是一款流行的JavaScript框架,它提供了許多方便的特性,所以它在開發網頁應用程式時非常有用。 Vue.js中的自訂事件系統使其更加靈活,並且可以透過元件事件觸發和處理來實現更好的程式碼重用性。在本文中,我們將討論如何使用Vue.js的自訂事件。 Vue.js中自訂事件的基礎在Vue.js中,我們可以透過v-on指令來監聽DOM事件。例如,

uniapp實作如何使用JSBridge實作與原生交互,需要具體程式碼範例一、背景介紹在行動應用開發中,有時需要與原生環境進行交互,例如呼叫原生的一些功能或取得原生的一些資料。 uniapp作為一種跨平台的行動應用開發框架,提供了一種方便的方式來實現與原生交互,即使用JSBridge進行通訊。 JSBridge是一種前端與行動原生端互動的技術方案,透過在前端和

使用企業微信介面與PHP進行資料互動的方法企業微信是企業內部溝通與協作的重要平台,開發者可透過企業微信介面實現與企業微信的資料互動。本文將介紹如何使用PHP語言來呼叫企業微信接口,實現資料的傳輸與處理。首先,需要建立一個企業微信應用,並取得對應的CorpID、Secret以及AgentID。這些資訊可以在企業微信管理後台的「應用與小程式」中找到。接下來,我

PHP與JavaScript互動的方法及常見問題解答隨著網路的快速發展,網頁已成為人們獲取資訊、進行交流的主要平台。而PHP和JavaScript是開發網頁的兩種最常用語言。它們都具有各自的優點和適用場景,而在大型網站的開發過程中,兩者的結合將會拓展開發人員的工作能力。本文將介紹PHP和JavaScript互動的方法及常見問題。 PHP與JavaSc

隨著網路的快速發展和資訊科技的日新月異,前端和後端開發作為兩個重要的IT領域在過去幾十年中也取得了巨大的進步。本文將探討前端後端開發的發展歷程,分析目前的發展趨勢,並展望未來的發展方向。一、前端後端開發的發展歷程早期階段在互聯網剛興起的時期,網站開發主要關注內容的呈現,前端開發工作主要集中在HTML、CSS和JavaScript等技術上,以實現頁面的基本

Vue自訂事件的用法和常見場景Vue.js是一個流行的JavaScript框架,用於建立使用者介面。在Vue中,我們可以透過自訂事件來實現元件之間的通訊。自訂事件是Vue中非常有用的功能之一,可以讓我們在不同的元件之間傳遞資料並觸發特定的行為。本文將介紹Vue中自訂事件的用法和常見場景,並提供具體的程式碼範例。一、自訂事件的基本用法在Vue中,我們可以
