最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mitt tiny-emitter發(fā)布訂閱應(yīng)用場景源碼解析

 更新時間:2022年12月25日 11:42:10   作者:codeniu  
這篇文章主要為大家介紹了mitt tiny-emitter發(fā)布訂閱應(yīng)用場景源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

本次課程的學習目標:

  • 了解 mitt、tiny-emitter 作用和使用場景、應(yīng)用場景
  • 學習 發(fā)布訂閱 設(shè)計模式

資源:

mitt

Mitt 是一個功能性 事件發(fā)射器,用于在 JavaScript 中進行事件發(fā)布和訂閱。它體積小巧,壓縮后只有 200 字節(jié),且無需依賴其他庫。它具有類似于 Node.js 中的 EventEmitter 的功能,并支持使用通配符“*”來監(jiān)聽所有事件。Mitt 可以在瀏覽器和其他 JavaScript 運行時中使用,并支持 IE9+。

下面是使用 Mitt 進行事件發(fā)布和訂閱的示例代碼:

// 創(chuàng)建一個 mitt 實例
const emitter = mitt();
// 訂閱 'myEvent' 事件
emitter.on('myEvent', (data) => {
  console.log('myEvent triggered with data:', data);
});
// 發(fā)布 'myEvent' 事件
emitter.emit('myEvent', { foo: 'bar' });  // 輸出: myEvent triggered with data: { foo: 'bar' }

你還可以使用通配符 * 來監(jiān)聽所有事件:

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' });  // 不會輸出任何內(nèi)容

tiny-emitter

tiny-emitter 同樣是一個小型的事件發(fā)射器庫,可以用于在 JavaScript 中進行事件發(fā)布和訂閱。

使用 tiny-emitter 的示例代碼如下:

// 創(chuàng)建一個 tiny-emitter 實例
const emitter = new TinyEmitter();
// 訂閱 'myEvent' 事件
emitter.on('myEvent', (data) => {
  console.log('myEvent triggered with data:', data);
});
// 發(fā)布 'myEvent' 事件
emitter.emit('myEvent', { foo: 'bar' });  
// 輸出: myEvent triggered with data: { foo: 'bar' }

Mitt 與 tiny-emitter的異同

Mitt 和 tiny-emitter 都是 JavaScript 事件發(fā)射器庫,可以用于在 JavaScript 中進行事件發(fā)布和訂閱。但是,它們有一些明顯的區(qū)別:

  • 體積:Mitt 比 tiny-emitter 更小,壓縮后僅有 200 字節(jié)。tiny-emitter 的體積略大,壓縮后約為 2.2 KB。
  • 支持的瀏覽器版本:Mitt 支持 IE9+,而 tiny-emitter 支持 IE6+。

盡管它們有一些區(qū)別,Mitt 和 tiny-emitter 都是功能強大且易于使用的事件發(fā)射器庫。選擇哪個庫取決于你的應(yīng)用程序的特定需求和偏好。

發(fā)布訂閱模式

發(fā)布-訂閱模式(也稱為觀察者模式)是一種軟件設(shè)計模式,允許對象(稱為發(fā)布者)向多個對象(稱為訂閱者)發(fā)布信息,并允許訂閱者獲取這些信息。這種模式通常用于在不同組件之間進行通信,并且不需要組件之間直接交互。

在發(fā)布-訂閱模式中,發(fā)布者通常是一個對象,負責維護訂閱者的列表并發(fā)布信息。訂閱者通常是另一個對象,負責訂閱特定的信息并執(zhí)行相應(yīng)的操作。訂閱者通常會實現(xiàn)一個回調(diào)函數(shù),在收到發(fā)布者發(fā)布的信息時調(diào)用。

發(fā)布-訂閱模式的優(yōu)點在于它允許組件之間松散耦合,并且易于擴展。發(fā)布者無需知道哪些訂閱者訂閱了信息,訂閱者也無需知道哪些發(fā)布者發(fā)布了信息。這使得發(fā)布者和訂閱者可以獨立變化和擴展。

示例:

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 類維護了一個訂閱者列表,可以注冊和取消訂閱者,并且可以向所有訂閱者發(fā)送消息。Subscriber 類實現(xiàn)了一個 update 方法,用于接收來自發(fā)布者的消息。

在示例中,我們創(chuàng)建了一個發(fā)布者實例和兩個訂閱者實例,并將訂閱者注冊到發(fā)布者中。然后,我們使用發(fā)布者的 notify 方法向所有訂閱者發(fā)送消息,并使用 unregister 方法取消一個訂閱者的注冊。

總結(jié)

發(fā)布-訂閱模式是一種有用的設(shè)計模式,可以解決許多對象或組件之間的協(xié)作問題。它使得對象或組件之間能夠更加靈活地協(xié)作,同時也能解除耦合,使得系統(tǒng)更加穩(wěn)定和可擴展。

以上就是mitt tiny-emitter發(fā)布訂閱應(yīng)用場景源碼解析的詳細內(nèi)容,更多關(guān)于mitt tiny-emitter發(fā)布訂閱的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript數(shù)組 幾個常用方法總結(jié)

    JavaScript數(shù)組 幾個常用方法總結(jié)

    這篇文章主要介紹了JavaScript數(shù)組 幾個常用方法,主要概述的方法有filter()、map()、sort()、reduce()、forEach(),這些方法都是JavaScript常用到的方法,下面文章內(nèi)容詳細介紹了他們的語法、參數(shù)、返回值等資料,需要的朋友可以參考一下
    2021-11-11
  • 前端加密cryptojs與JSEncrypt使實例詳解

    前端加密cryptojs與JSEncrypt使實例詳解

    這篇文章主要為大家介紹了前端加密cryptojs與JSEncrypt使實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • JS SVG獲取驗證碼的玩法示例

    JS SVG獲取驗證碼的玩法示例

    這篇文章主要為大家介紹了JS SVG獲取驗證碼的玩法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • JavaScript監(jiān)測數(shù)據(jù)類型方法全面總結(jié)

    JavaScript監(jiān)測數(shù)據(jù)類型方法全面總結(jié)

    這篇文章主要為大家介紹了JavaScript監(jiān)測數(shù)據(jù)類型方法示例全面總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 微信小程序 動態(tài)綁定事件并實現(xiàn)事件修改樣式

    微信小程序 動態(tài)綁定事件并實現(xiàn)事件修改樣式

    這篇文章主要介紹了微信小程序 動態(tài)綁定事件并實現(xiàn)事件修改樣式的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 微信小程序 五星評價功能的實現(xiàn)

    微信小程序 五星評價功能的實現(xiàn)

    這篇文章主要介紹了微信小程序 五星評價功能的實現(xiàn)的相關(guān)資料,這里附有實例代碼及實現(xiàn)效果圖,需要的朋友可以參考下
    2017-03-03
  • Three.js相機Camera控件知識梳理

    Three.js相機Camera控件知識梳理

    這篇文章主要為大家介紹了Three.js相機Camera控件知識梳理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 微信小程序 循環(huán)及嵌套循環(huán)的使用總結(jié)

    微信小程序 循環(huán)及嵌套循環(huán)的使用總結(jié)

    這篇文章主要介紹了微信小程序 循環(huán)及嵌套循環(huán)的使用總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 3分鐘精通高階前端隨手寫TS插件

    3分鐘精通高階前端隨手寫TS插件

    這篇文章主要為大家介紹了3分鐘精通高階前端隨手寫TS插件的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解如何使用mock.js實現(xiàn)接口測試的自動化

    詳解如何使用mock.js實現(xiàn)接口測試的自動化

    這篇文章主要為大家介紹了如何使用mock.js實現(xiàn)接口測試的自動化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論

温州市| 永安市| 白河县| 隆林| 平果县| 轮台县| 南汇区| 白城市| 鹿泉市| 和田市| 荣昌县| 嫩江县| 历史| 射洪县| 沿河| 乐陵市| 鹤庆县| 兖州市| 柞水县| 扬中市| 尼木县| 台南县| 平邑县| 灵川县| 潞西市| 平塘县| 石渠县| 田东县| 赫章县| 新和县| 疏附县| 金塔县| 南涧| 嘉黎县| 汉川市| 山东省| 永川市| 沅江市| 东海县| 彭水| 邵阳市|