延续昨天的 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 你好吗? 事件触发中')
这样就能简单自订和触发事件惹
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')
今天就先到这边
我们明天见
ㄅㄅ
後记: 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');
这边有 extend
、 class
的介绍
<<: IOS、Python自学心得30天 Day-4 TensorFlow 资料处理
>>: [Day-7] R语言 - K - means 简介 ( K - means Algorithm )
本文说明如何为地图和地图物件加入 Context menu,当您在地图上按滑鼠右键即显示该位置的经纬...
问题描述 重灌了几次ansys,又灌了其他软件之後,突然某一天发现用 oAnsoftApp = cl...
每次网路搜寻关键字SSR、MPA、SPA,都会有看没有懂的感觉,看完过没多久马上就忘了,藉由这次机会...
filter filter() 会建立一个新的阵列,其内容为原阵列的每一个元素经由回呼函式判断後所回...
Syft 可以用来产生容器 (container image) 与档案系统 (file system...