javascript
NodeJS学习笔记(四) events,util模块
開發指南中講到的node核心模塊有events,util,fs,http。介于篇幅的原因,在這里我想分兩個次總結筆記。
Events模塊
Events是node最重要的模塊。Nodejs本身架構就是基于事件的。
Event.EventEmitter
????àEventEmitter.on(event,listener) //注冊一個時間,事件名為event,相應事件的回調函數為listener
????à EventEmitter.emit(event,[arg1],[arg2],[…])//args為發射已注冊的事件event,并傳遞若干個args參數
????à EventEmitter.once(event,listener)//單詞監聽事件,時間最多只能觸發一次,出發后該注冊的event時間會解除監聽
????à EventEmitter.removeListrner(event,listener)//解除已監聽了的事件
????à EventEmitter.removeListrner(event,listener)
Node中已經有定義好的事件,比如說error事件。當error被發射時(emit),如果eventEmitter沒有響應的監聽器,node會把它當作一場,并退出程序打印調用棧
上面代碼中定義了兩個同名的someEvent事件。Node會根據兩個時間的監聽器調用相關回調函數。
打印結果
通常情況下,不會直接使用EventEmitter,而是使用繼承他的方式。
Util模塊
文中講到了util的兩個API:util.inherits和util.inspect
util.inherits:
util.inherits(constructor,superConstructor).這個是node包裝好的用于實現繼承的方法。在javascript中的繼承和java中的不太一樣。開發指南中對它的解釋挺有意思:
"基于類的語言中類就像一個模具,對象有這個模具澆注產生,而基于原型的語言中,原想就好像一件藝術品的原件,我們通過以太100%精確的機器把這個原件復制出很多分"
Node包裝好的這個繼承只能繼承父類中在原型中定義的函數:
結果:
可以看到,使用過原型定義的函數shouName能夠正常輸出。代碼段中26行把sayHello()注釋掉,因為sub中沒有繼承到base的sayHello()方法,會拋出異常:
這當然不是這兩個API的全部用法,只是適用于初學node掌握node的特性。由于node是異步的方式,在多事件寫作的時候會有控制流的問題。以后深入研究后會在這里補上筆記!
Util.inspect
在我理解看來,這個方法有點像java里面的toString()
Util.inspect(Object,[shouHidden],[depth],[colors])
Object:既要轉換的對象
showHidden:如果設置為true,相識更多隱藏信息
depth:表示最大遞歸的層數。如果不指定,默認遞歸兩層。指定為null,不限制層數的遞歸
color:用于顯示顏色
下面用一個例子展現
轉載于:https://www.cnblogs.com/wenlonghor/p/3309527.html
總結
以上是生活随笔為你收集整理的NodeJS学习笔记(四) events,util模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 由JS函数返回值引发的一场”血案
- 下一篇: 临时表的使用方法