在 Node.js 中,Event是非常核心的模組,大部分的核心模組基本上都有用到或者繼承了該模組。Event模組和我們之前在Javascript中學習的EventTarget介面很類似。對於該模組我們能做的不僅僅是簡單的使用還可以在該模組的基礎上做出擴充套件,你想想JS中的onclick、onmousemove
不羅嗦,直接上程式碼!
因為事件模組屬於比較抽象的東西,所以不太適合用大篇幅的語言來描述它,所以我決定直接上程式碼,先實現功能看效果再說。下面就一起來體驗下這個模組的功能吧。
對自定義類進行擴充套件
在前端我們可以對一個元素進行事件的監聽,例如
button.addEventListener('click'()=>{ alert('我被點選了');},false);
這種做法實際上就是在對待頁面中的DOM物件新增事件監聽,在Node.js中是無法直接為一個物件新增事件監聽的,因為我們自定義的類或者物件都是沒有實現或繼承 Events 模組的。
想要使用 Events 模組就需要先匯入該模組。
const event = require('events');
接下來就是具體程式碼的實現
// 官網案例改編 // 鬧鐘類 繼承 事件模組 class Clock extends event{ constructor(name){ // 呼叫父類的建構函式 super(); this.name = name; // 呼叫自身的鬧鈴方法 this.ring(); } ring(){ // 每三秒響一次鬧鈴 setInterval(()=>{ // 觸發ring事件 this.emit('ring'); },3000); } } let clock1 = new Clock('小豬'); // 讓 clock1 物件監聽 ring事件 clock1.on('ring',function(){ console.log(`${this.name}鬧鐘叫你起床啦!`); });
以上的程式碼就是為了擴充套件咱們自定義類的。在以上程式碼中我們使用了event模組中的兩個方法:on(),emit()。 這兩個方法分別是為了 註冊事件 與 觸發事件 的。在event模組中比較有用的方法遠遠不止這兩個,下面列出幾個較為常用的方法。
on():註冊事件,新增被監聽的事件名稱到監聽器陣列的末尾。addListener():同上。off():移除事件,從監聽器陣列移除被監聽的事件名稱。removeListener():同上。eventNames():返回已註冊監聽器的事件名陣列。 陣列中的值為字串或 Symbol。Tips:
因為事件的概念較為抽象,所以我們大部開發者並不是很喜歡使用Events模組實現監聽,更多的時候我們可能更加喜歡以回撥函式的方式的完成對某個函式或者方法的監聽。
所以我們對 Events 模組的學習其實並不僅僅是為了將來能在開發中為自定義類新增事件,更多的其實為了對 Node.js 的知識點整體架構有一定的瞭解,瞭解知識點的來龍去脈。
學習了 Events 之後我們也就可以明白為什麼之後學習的很多的核心模組為什麼都會有 on() 和 off() 方法,因為它們都是繼承了 Events 模組的。