EventEmitter是Node.js的核心模块events中的类。
核心:事件触发与事件监听器功能的封装。
是典型的发布订阅模式,实现了事件调度中心。
怎么手写实现EventEmitter类呢?思路:当执行on函数时,将回调函数保存起来,等emit函数触发事件之后,再执行回调函数。这样就实现了事件的监听以及订阅了。
class EventEmitter{
constructor(){
//事件监听函数保存的地方
this.events={};
}
//@param是对函数参数进行解释作用
/**
* 注册事件监听者
* @param {String} eventName 事件类型
* @param {Function} callback 回调函数
*/
on(eventName,callback){
if (!this.events[eventName]) {
//该事件类型不存在,设置数组存放回调函数
this.events[eventName]=[]
}
//将回调函数放入该事件类型数组
this.events[eventName].push(callback);
}
/**
* 发布事件
* @param {String} eventName 事件类型
* @param {...any} args 参数列表,把emit传递的参数赋给回调函数
*/
emit(eventName,...args){
//emit触发事件,把回调函数拉出来执行
this.events[eventName] && this.events[eventN