<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本次課程的學習目標:
資源:
Mitt 是一個功能性 事件發射器,用於在 JavaScript 中進行事件釋出和訂閱。它體積小巧,壓縮後只有 200 位元組,且無需依賴其他庫。它具有類似於 Node.js 中的 EventEmitter 的功能,並支援使用萬用字元“*”來監聽所有事件。Mitt 可以在瀏覽器和其他 JavaScript 執行時中使用,並支援 IE9+。
下面是使用 Mitt 進行事件釋出和訂閱的範例程式碼:
// 建立一個 mitt 範例 const emitter = mitt(); // 訂閱 'myEvent' 事件 emitter.on('myEvent', (data) => { console.log('myEvent triggered with data:', data); }); // 釋出 'myEvent' 事件 emitter.emit('myEvent', { foo: 'bar' }); // 輸出: myEvent triggered with data: { foo: 'bar' }
你還可以使用萬用字元 *
來監聽所有事件:
emitter.on('*', (event, data) => { console.log(`event "${event}" triggered with data:`, data); }); emitter.emit('myEvent', { foo: 'bar' }); // 輸出: event "myEvent" triggered with data: { foo: 'bar' } emitter.emit('anotherEvent', { baz: 'qux' }); // 輸出: event "anotherEvent" triggered with data: { baz: 'qux' }
你還可以使用 emitter.off
方法取消訂閱特定事件:
const handler = (data) => { console.log('myEvent triggered with data:', data); }; emitter.on('myEvent', handler); emitter.emit('myEvent', { foo: 'bar' }); // 輸出: myEvent triggered with data: { foo: 'bar' } emitter.off('myEvent', handler); emitter.emit('myEvent', { foo: 'bar' }); // 不會輸出任何內容
tiny-emitter 同樣是一個小型的事件發射器庫,可以用於在 JavaScript 中進行事件釋出和訂閱。
使用 tiny-emitter 的範例程式碼如下:
// 建立一個 tiny-emitter 範例 const emitter = new TinyEmitter(); // 訂閱 'myEvent' 事件 emitter.on('myEvent', (data) => { console.log('myEvent triggered with data:', data); }); // 釋出 'myEvent' 事件 emitter.emit('myEvent', { foo: 'bar' }); // 輸出: myEvent triggered with data: { foo: 'bar' }
Mitt 和 tiny-emitter 都是 JavaScript 事件發射器庫,可以用於在 JavaScript 中進行事件釋出和訂閱。但是,它們有一些明顯的區別:
儘管它們有一些區別,Mitt 和 tiny-emitter 都是功能強大且易於使用的事件發射器庫。選擇哪個庫取決於你的應用程式的特定需求和偏好。
釋出-訂閱模式(也稱為觀察者模式)是一種軟體設計模式,允許物件(稱為釋出者)向多個物件(稱為訂閱者)釋出資訊,並允許訂閱者獲取這些資訊。這種模式通常用於在不同元件之間進行通訊,並且不需要元件之間直接互動。
在釋出-訂閱模式中,釋出者通常是一個物件,負責維護訂閱者的列表並行布資訊。訂閱者通常是另一個物件,負責訂閱特定的資訊並執行相應的操作。訂閱者通常會實現一個回撥函數,在收到釋出者釋出的資訊時呼叫。
釋出-訂閱模式的優點在於它允許元件之間鬆散耦合,並且易於擴充套件。釋出者無需知道哪些訂閱者訂閱了資訊,訂閱者也無需知道哪些釋出者釋出了資訊。這使得釋出者和訂閱者可以獨立變化和擴充套件。
範例:
class Publisher { constructor() { this.subscribers = []; } register(subscriber) { this.subscribers.push(subscriber); } unregister(subscriber) { this.subscribers = this.subscribers.filter(s => s !== subscriber); } notify(message) { this.subscribers.forEach(subscriber => subscriber.update(message)); } } class Subscriber { update(message) { console.log('Received message:', message); } } const publisher = new Publisher(); const subscriber1 = new Subscriber(); const subscriber2 = new Subscriber(); publisher.register(subscriber1); publisher.register(subscriber2); publisher.notify('Hello, world!'); // Output: "Received message: Hello, world!" publisher.unregister(subscriber1); publisher.notify('Hello, again!'); // Output: "Received message: Hello, again!"
在這個範例中,我們定義了一個 Publisher
類和一個 Subscriber
類。Publisher
類維護了一個訂閱者列表,可以註冊和取消訂閱者,並且可以向所有訂閱者傳送訊息。Subscriber
類實現了一個 update
方法,用於接收來自發布者的訊息。
在範例中,我們建立了一個釋出者範例和兩個訂閱者範例,並將訂閱者註冊到釋出者中。然後,我們使用釋出者的 notify
方法向所有訂閱者傳送訊息,並使用 unregister
方法取消一個訂閱者的註冊。
釋出-訂閱模式是一種有用的設計模式,可以解決許多物件或元件之間的共同作業問題。它使得物件或元件之間能夠更加靈活地共同作業,同時也能解除耦合,使得系統更加穩定和可延伸。
以上就是mitt tiny-emitter釋出訂閱應用場景原始碼解析的詳細內容,更多關於mitt tiny-emitter釋出訂閱的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45