文章目录
案列代码
const events = require("events"); var emitter = new events.EventEmitter(); const listener1=function(arg1,arg2){ console.log("listener1",arg1,arg2); }; const listener2 = function(arg1,arg2){ // 默认传入this指向当前监听器 console.log("listener2",arg1,arg2,this); } // 注册监听器1 const em1 = emitter.on('someEvent',listener1); // console.log(em1); console.log("----"); // 注册监听器2 const em2 = emitter.on('someEvent',listener2) // console.log(em2); console.log("----"); // 注册事件发射器 emitter.emit('someEvent','触发器',1991,res=>{ console.log("发射事件1"); }); console.log("发射器1完毕"); // 解除监听器1 emitter.removeListener('someEvent',listener1,res=>{ console.log("监听器一解除"); }); emitter.emit('someEvent','触发器',1991); emitter.on('someEvent',(arg1,arg2)=>{ console.log("listener3",arg1,arg2); })
输出结果
PS D:\Codes\node> node "d:\Codes\node\11、事件发射器.js" ---- ---- listener1 触发器 1991 listener2 触发器 1991 EventEmitter { _events: [Object: null prototype] { someEvent: [ [Function: listener1], [Function: listener2] ] }, _eventsCount: 1, _maxListeners: undefined, [Symbol(kCapture)]: false } 发射器1完毕 listener2 触发器 1991 EventEmitter { _events: [Object: null prototype] { someEvent: [Function: listener2] }, _eventsCount: 1, _maxListeners: undefined, [Symbol(kCapture)]: false }
代码解析
- 回调问题
// 注册事件发射器 emitter.emit('someEvent','触发器',1991,res=>{ console.log("发射事件1"); });
// 解除监听器1 emitter.removeListener('someEvent',listener1,res=>{ console.log("监听器一解除"); });
通过输出结果可以发现事件的发射器,以上两个函数的回调都没有执行,由此可知,事件的发射器跟监听器的解除过程都不会涉及到事件的回调
- this 指针
const listener1=function(arg1,arg2){ console.log("listener1",arg1,arg2); };
const listener2 = function(arg1,arg2){ // 默认传入this指向当前监听器 console.log("listener2",arg1,arg2,this); }
输出结果:
listener1 触发器 1991 listener2 触发器 1991 EventEmitter { _events: [Object: null prototype] { someEvent: [ [Function: listener1], [Function: listener2] ] }, _eventsCount: 1, _maxListeners: undefined, [Symbol(kCapture)]: false }
通过代码与输出结果的比对,我们发现监听器会默认带有this指针,指向当前的监听器的监听事件
EventEmitter
对象;对象内的
someEvent
就是我们监听的事件,[Function: listener1], [Function: listener2] ],
就是我们定义的两个监听器
- 代码的实现
emitter.on('someEvent',(arg1,arg2)=>{ console.log("listener3",arg1,arg2); })
// 我们发现在事件发射器后面的监听器并不能监听到前面的事件发射。