日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談JS和Nodejs中的事件驅動

瀏覽:192日期:2024-03-29 08:45:34
事件驅動和發布-訂閱

事件驅動架構是建立在軟件開發中一種通用模式上的,這種模式被稱為發布-訂閱或觀察者模式。

在事件驅動架構中,至少有兩個參與者:主題(subject)和觀察者(observer)。

主題就像調頻收音機一樣,向有興趣收聽該主題所說內容的觀察者進行廣播。

觀察者可能只有一個,也可能有一百個,這都沒有關系,只要主題有一些要廣播的消息就夠了。

請記住,事件驅動、發布-訂閱和觀察者模式在實踐中不是一回事,但在理想情況下,它們使用相同的方法:一個實體廣播一條消息,其他實體偵聽該消息。

發布-訂閱模式和我一樣老。在 1987 年左右開始理論化,而觀察者模式則出現在 1994 年由“四人幫”所寫的著作《設計模式》中。

事件驅動是怎樣用在瀏覽器中的JavaScript的?

借助引擎,JavaScript可以運行在你的瀏覽器中。

最受歡迎的 JavaScript 引擎是 Google Chrome 和 Node.js所使用的V8,Firefox 的 SpiderMonkey 和 Safari/WebKit 使用的 JavaScriptCore。

基于供豐富的環境,JavaScript 引擎增強了語言,還提供了事件驅動的 JavaScript 平臺。

實際上,瀏覽器中的 JavaScript 可以與html元素進行交互,這些html元素是事件發送器(event emitters),即能夠發送事件的對象。

思考一下這個簡單的例子,一個帶有按鈕的 HTML 文檔:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>What means 'event-driven' in JavaScript?</title></head><body><div> <button id='subscribe'>SUBSCRIBE</button></div></body></html>

如果沒有 JavaScript,則這個按鈕將毫無生命。現在 HTML 按鈕是HTMLButtonElement類型的元素,并且與所有 HTML 元素一樣,它們都連接到EventTarget—— 每個 HTML 元素的共同祖先。

瀏覽器中的事件目標是能夠發出事件的對象:它們是觀察者模式中的主題。

有點混亂?請記住:主題是 FM 廣播,所以任何 HTML 元素都像是廣電臺。

一會兒,你將看到誰是觀察者。

瀏覽器中的主題和觀察者

如果 HTML 元素是主題,那么誰是觀察者?任何注冊為偵聽器的 JavaScript函數都可以對瀏覽器中的事件做出反應。

使用 JavaScript 選擇一個 HTML 元素:

const btn = document.getElementById(’subscribe’);

并使用 addEventListener注冊偵聽器:

const btn = document.getElementById(’subscribe’);btn.addEventListener('click', function () { console.log('Button clicked');});

這里的“click”是事件,按鈕是主題,或者是發送器,函數是偵聽器,或者是觀察者。

回顧一下:

HTML 元素是事件發送器。

JavaScript 中注冊為偵聽器的函數是觀察者。

所有這些組件構成了“一個小小的事件驅動的體系結構。要測試代碼請保存下面的 HTML 內容到文件(或在 Codepen 上嘗試),請單擊按鈕,然后查看瀏覽器的控制臺:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>What means 'event-driven' in JavaScript?</title></head><body><div> <button id='subscribe'>SUBSCRIBE</button></div></body><script> const btn = document.getElementById(’subscribe’); btn.addEventListener('click', function () {console.log('Button clicked'); });</script></html>

在下一部分中,你將看到用于 Node.js的相同概念。

事件驅動如何用于 Node.js?

Node.js是用于基于 V8 引擎的運行在瀏覽器之外(命令行工具和服務器端)的 JavaScript 環境。

你在 Node.js 中所做的大部分工作都是基于事件的。總會有一個發送器對象,一些觀察者在監聽消息。

在 Node.js 中,沒有任何 HTML 元素,因此大多數事件都來自進程、與網絡的交互、文件等。

Node.js 中的每個事件發送器都有一個名為on的方法,該方法至少需要兩個參數:

要偵聽的事件的名稱 監聽器函數

讓我們舉一個實際的例子。看一下這個簡單的 Node.js 服務器:

const net = require('net');const server = net.createServer().listen(8081, '127.0.0.1');server.on('listening', function () { console.log('Server listening!');});server.on('connection', function (socket) { console.log('Client connected!'); socket.end('Hello client!');});

這段代碼創建了一個監聽本地主機端口 8081 的服務器。在server 對象上,我們調用 on 方法來注冊兩個偵聽器函數。

服務器啟動后立即觸發listening事件,而客戶端連接到 127.0.0.1:8081 時將觸發connection 事件(嘗試一下!)。

在此示例中,server是事件發送器,主題。另一方面,偵聽器函數是觀察者。

但是那些on方法從哪里來的呢?

了解 EventEmitter

Node.js 中的所有事件驅動模塊都擴展了一個名為EventEmitter的根類。在我們之前的例子中,來自 net 模塊的網絡服務器就使用了 EventEmitter。

Node.js 中的EventEmitter有兩種基本方法:on和emit。

如果你想要與瀏覽器對應,那么可以把EventEmitter看作是能夠發出事件的任何一種 HTML 元素。

要在瀏覽器中偵聽事件,請在主題對象上調用addEventListener:

const btn = document.getElementById(’subscribe’);btn.addEventListener('click', function () { console.log('Button clicked');});

相反,在 Node.js 中有on:

// omitserver.on('listening', () => { console.log('Server listening!');});// omit

準確地說,Eve​​ntEmitter上還有一個addListener方法。on是它的別名。

EventEmitter還有一個emit方法,在你廣播自定義事件(消息)時很有用。

如果要使用EventEmitter,請從 “events” 模塊中導入并發出事件:

const EventEmitter = require('events');const emitter = new EventEmitter();emitter.on('customEvent', () => console.log('Got event!'));emitter.emit('customEvent');

用 Node.js 運行代碼,你將在控制臺中看到 “Got event”。

JavaScript 中有關觀察者/發布-訂閱的其他示例

JavaScript 沒有對觀察者對象的原生支持,但是有人建議將其添加到語言中。

RxJS是一個將觀察者模式引入 JavaScript 的庫。

Redux是 JavaScript 中發布-訂閱模式的實現。 這是一個非常好的事件發送器,其中狀態的更改會被分發給所有監聽的觀察者。

現代瀏覽器附帶Intersection Observer API,這是觀察者模式的另一個例子。

Socket.IO是一個庫,大量使用了事件。

總結

希望你從這篇文章中學到新的東西。你學到了很多術語,但最終都歸結為大約 30 年前發明的模式:發布-訂閱。

這種模式,也稱為觀察者,是我們今天在 JavaScript 和 Node.js 中所使用的事件驅動架構的基礎。

再次強調,事件驅動、發布-訂閱和觀察者的模式并非完全相同:事件驅動的體系結構建立在發布-訂閱之上,觀察者模式比 DOM 和 Node.js 事件更豐富。

但他們都是屬于同一個家庭的成員。

以上就是淺談JS和Nodejs中的事件驅動的詳細內容,更多關于JS和Nodejs中的事件驅動的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美 日韩 国产精品免费观看| 久久亚洲黄色| 久久久久欧美精品| 成人亚洲欧美| 日本少妇一区| 日本一区二区免费高清| 国产精品99视频| 日本а中文在线天堂| 国产在线日韩| 日韩在线观看一区二区| 日韩欧美另类中文字幕| 国产精品调教| 精品国产麻豆| 日韩国产欧美| 蜜桃视频欧美| 亚洲日本在线观看视频| 日韩欧美中文在线观看| 精品一区二区三区免费看 | 欧美有码在线| 国产精品xvideos88| 亚洲国产不卡| 中文另类视频| 日韩av一区二| 午夜欧美理论片| 亚洲综合婷婷| 九九精品调教| 青青国产精品| 韩国精品主播一区二区在线观看 | 色综合视频一区二区三区日韩 | 怡红院精品视频在线观看极品| 国产农村妇女精品一区二区| 精品国产一区二| 日产欧产美韩系列久久99| 7777精品| 五月激情久久| 亚洲欧美久久久| 国产精品香蕉| 亚洲精品网址| 国产日韩一区二区三区在线| 日本美女一区| 亚洲精品影视| 91亚洲自偷观看高清| 日韩在线观看一区二区| 欧美黄色精品| 91久久国产| 中文字幕亚洲精品乱码| 精品中文字幕一区二区三区四区| 免费欧美一区| 国产剧情一区二区在线观看| 日韩精品一卡| 日本aⅴ免费视频一区二区三区| 国产99在线| 五月国产精品| 久久青草久久| 91成人在线精品视频| 日韩三区免费| 日本不卡中文字幕| 成人午夜国产| 国产欧美另类| 欧美日韩国产在线观看网站| 国产欧美日韩在线一区二区| 蜜桃精品在线| 国产精品一区二区99| 夜夜精品视频| 日韩精品91亚洲二区在线观看| 日韩成人亚洲| 91久久视频| 亚洲色图国产| 欧美激情 亚洲a∨综合| 国产精品巨作av| 国产h片在线观看| 精品国内亚洲2022精品成人 | 香蕉久久久久久久av网站| 2023国产精品久久久精品双| 香蕉久久99| 久久狠狠久久| 麻豆久久一区| 精品三级av| 国产精品videossex| 自拍自偷一区二区三区| 岛国av在线网站| 国产日韩亚洲| 蜜臀精品久久久久久蜜臀| 日韩在线短视频| 国产成人免费视频网站视频社区| 亚洲免费福利一区| 免费不卡中文字幕在线| 国产一区不卡| 日韩亚洲精品在线| 亚洲精品影视| 日韩三区在线| sm久久捆绑调教精品一区| 日本一不卡视频| 久久精品资源| 国产精品传媒麻豆hd| 色88888久久久久久影院| 久久国产精品美女| 亚洲欧美久久精品| 欧美日韩视频免费看| 蜜桃一区二区三区在线| 久久九九电影| 久久精品女人| 国产欧美日韩影院| 日韩不卡一区二区| 国产视频亚洲| 欧美日韩日本国产亚洲在线| 日韩精品欧美激情一区二区| 国产在线观看www| 国产aⅴ精品一区二区三区久久| 国产精品视频一区二区三区| 日韩av网站在线免费观看| 亚洲欧美网站在线观看| 丝袜国产日韩另类美女| 影音先锋久久| 怡红院精品视频在线观看极品| 99精品在线免费在线观看| 国产精品久久观看| 精品国产亚洲一区二区在线观看| 国产精品99久久免费观看| 欧美日韩调教| 欧美一区在线观看视频| 国产日韩欧美一区二区三区| 日韩av中文字幕一区二区三区| 日韩中文字幕在线一区| 日韩综合小视频| 日韩不卡一区二区三区| 国产日本精品| 麻豆精品在线观看| 精品国产欧美| caoporn视频在线| 波多野结衣久久精品| 日本精品影院| 一区三区视频| 亚洲精品一区二区在线播放∴| 亚洲精品欧美| 国产另类在线| 精品久久久网| 免费日韩精品中文字幕视频在线| 日av在线不卡| 日本麻豆一区二区三区视频| 国产精品www.| 久久婷婷激情| 天堂精品久久久久| 精品中文字幕一区二区三区| 亚洲国内精品| 日韩在线观看一区二区三区| 麻豆久久久久久| 一区二区三区网站| 精品视频91| 久久中文字幕一区二区| 国产一区欧美| 国产亚洲福利| 国产视频一区免费看| 中文av在线全新| 蜜芽一区二区三区| 精品国产一区二| 午夜av不卡| 欧美日韩国产一区二区三区不卡| 欧美一区自拍| 久久久久久色 | 丝瓜av网站精品一区二区| 四虎在线精品| 日韩在线看片| 欧美亚洲综合视频| 日本欧美不卡| 国产精品免费看| 亚洲影视一区| 国产精品久久| 99精品在线观看| 91大神在线观看线路一区| 高清av不卡| 91精品国产自产精品男人的天堂| 日本午夜精品久久久久| 久久精品国产大片免费观看| 国产亚洲久久| 在线日韩一区| 久久只有精品| 蜜桃视频一区二区三区| 久久夜夜操妹子| 国产日产高清欧美一区二区三区| 欧美在线网站| 久久精品国产99国产| 亚洲精品第一| 欧美日韩国产在线观看网站 | 久久只有精品| 亚州av日韩av| 亚洲欧洲一区| 成人日韩在线| 精品一区二区三区的国产在线观看 | 亚洲欧洲国产精品一区| 久久精品91| 成人影视亚洲图片在线| 日本99精品| 一本色道精品久久一区二区三区| 精品一区二区三区免费看 | 999久久久精品国产| 麻豆一区二区三区| 91午夜精品| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 色综合视频一区二区三区日韩 |