首頁 web前端 js教程 js自訂事件及事件互動原理概述(二)_javascript技巧

js自訂事件及事件互動原理概述(二)_javascript技巧

May 16, 2016 pm 05:42 PM
互動 自訂事件

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事件的讀者有幫助,互相交流。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
開啟win11的分割畫面互動方式 開啟win11的分割畫面互動方式 Dec 25, 2023 pm 03:05 PM

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

Vue3+TS+Vite開發技巧:如何與後端API進行交互 Vue3+TS+Vite開發技巧:如何與後端API進行交互 Sep 08, 2023 pm 06:01 PM

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

VUE3基礎教學:使用Vue.js自訂事件 VUE3基礎教學:使用Vue.js自訂事件 Jun 15, 2023 pm 09:43 PM

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

uniapp實作如何使用JSBridge實作與原生交互 uniapp實作如何使用JSBridge實作與原生交互 Oct 20, 2023 am 08:44 AM

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

使用企業微信介面與PHP進行資料互動的方法 使用企業微信介面與PHP進行資料互動的方法 Jul 05, 2023 am 09:00 AM

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

PHP與JavaScript互動的方法及常見問題解答 PHP與JavaScript互動的方法及常見問題解答 Jun 08, 2023 am 11:33 AM

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

前端後端開發的發展歷程與趨勢展望 前端後端開發的發展歷程與趨勢展望 Mar 26, 2024 am 08:03 AM

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

Vue自訂事件的用法和常見場景 Vue自訂事件的用法和常見場景 Sep 15, 2023 pm 12:12 PM

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

See all articles