基础
Node.js 提供了使用 events 模块,此模块提供了 EventEmitter 类,用于处理事件。
初始化
const EventEmitter = require('events')
const eventEmitter = new EventEmitter()
事件对象公开了 on 和 emit 方法。
- on 用于添加回调函数(会在事件被触发时执行)
- emit 用于触发事件
vue中的父子组件传参应该就是基于这个对象,v-on:事件和emit(事件)
实例
const EventEmitter = require('events');
const em = new EventEmitter();
//自定义事件
em.on('sayName', (name) => {
console.log(`name是:${name}`)
})
em.emit('sayName',"Node事件")
进阶
将参数和 this 传给监听器
const EventEmitter = require('events');
const em = new EventEmitter();
//自定义事件
em.on('sayName', (name) => {
console.log(`name是:${name}`, this, this == em)
})
em.emit('sayName', "Node事件")
结果:name是:Node事件 {} false
em.on('sayName', function (name) {
console.log(`name是:${name}`, this, this == em)
})
em.emit('sayName', "Node事件")
结果:name是:Node事件 EventEmitter {
_events: [Object: null prototype] { sayName: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
[Symbol(kCapture)]: false
} true
- 当调用普通的监听器函数时,this 关键字会绑定到事件对象上。使用 ES6 箭头函数作为监听器,this不会被绑定到事件对象上
once()
on() 方法注册监听器时,每次触发命名事件时都会调用该监听器。once()方法,监听的事件只能够被触发一次,之后事件讲不会再被触发。用法与on()相同。
addListener
on方法的另一种写法
eventNames()
返回列出触发器已为其注册监听器的事件的数组。 数组中的值是字符串或 Symbol
getMaxListeners()
获取最大监听数
off(eventName, listener)
移除监听,同removeListener()
setMaxListeners(n)
设置最大监听数