#7 - The Node Event Emitter

延续昨天的 module 课题。其实 Module 除了可以自订之外(像我们昨天的 stuff ),node.JS 中还有许多方便内建的模组,称作core module,要 import 这些 Module 我们直接 require(“core Module name”) 就好,使用上十分方便,下面就简单介绍几个 core Module 吧!

#Event

Event,中文叫事件,没错,就是 JavaScript 语法 addEventListener 的 Event。这个 Event Module 可以让我们自订事件,然後当那个事件被触发时透过 function 去做一些事,就像那些我们在 JS 的 addEventListener 做的。

第一步:import event module

const events = require('events')

第二步:建立一个 Event Emitter 实例:

const myEmitter = new events.Eventemitter()

第三步:自订 event 和触发时要做的事 :

myEmitter.on('myEvent', msg => console.log(msg))

第四步:触发事件

myEmitter.emit('myEvent', 'hello 你好吗? 事件触发中')

这样就能简单自订和触发事件惹
https://ithelp.ithome.com.tw/upload/images/20210907/20127352ERTsBsOk2J.png

util
util 也是一个 node 内建的 core module,这个 util module 有许多不同的功能,我们今天要使用的是 inherits,他能使某个函式实现原型继承。

一样我们先 import 这个 module

const util = require('util')

然後我们写一个 function constructor:
如果对函式建构式不熟的可以看PJ大的这篇

let Person = function(name){
  this.name = name
}

然後我们现在想让 Person 继承 Event Emitter:

util.inherits (Person, event.EventEmitter)

//util.inherits(constructor( 建构子,继承别人的人 ), superConstructor( 父建构子,被继承的人))

之後用这个 function constructor 做出三个人,并将这三个人放进阵列里用forEach跑回圈替每个人榜上'speak'这自订 event:

let james = new Person('james')
let mary = new Person('mary')
let ryu = new Person('ryu')

let people = [james, mary, ryu]

people.forEach(person =>{
  person.on('speak', msg => 
   console.log(`${person.name} said ${msg})
  )}
)

最後用 emit 触发他们:


james.emit('speak', 'hey dude')
ryu.emit('speak', 'I like curry')

https://ithelp.ithome.com.tw/upload/images/20210907/20127352FesaMaC4FX.png

今天就先到这边
我们明天见
ㄅㄅ

後记: util.inherits 这个语法已进入坟墓惹,我们点开 node.js 的 doc,他会推荐你使用es6 的 extend 和class 取代 util.inherits,下面是新的写法


const EventEmitter = require('events');

class MyStream extends EventEmitter {
  write(data) {
    this.emit('data', data);
  }
}

const stream = new MyStream();

stream.on('data', (data) => {
  console.log(`Received data: "${data}"`);
});
stream.write('With ES6');

这边extendclass 的介绍


<<:  IOS、Python自学心得30天 Day-4 TensorFlow 资料处理

>>:  [Day-7] R语言 - K - means 简介 ( K - means Algorithm )

HERE API Example - Context menu

本文说明如何为地图和地图物件加入 Context menu,当您在地图上按滑鼠右键即显示该位置的经纬...

python开启ansys软件问题 (2147221164, '类别未登录')

问题描述 重灌了几次ansys,又灌了其他软件之後,突然某一天发现用 oAnsoftApp = cl...

Vue.js 从零开始:SSR、MPA、SPA的概念

每次网路搜寻关键字SSR、MPA、SPA,都会有看没有懂的感觉,看完过没多久马上就忘了,藉由这次机会...

JavaScript Day18 - 阵列操作(filter、find、findIndex)

filter filter() 会建立一个新的阵列,其内容为原阵列的每一个元素经由回呼函式判断後所回...

Day 30 - SBOM 工具 - syft

Syft 可以用来产生容器 (container image) 与档案系统 (file system...