事件监听器
Nodejs所有的异步I/O操作在完成时都会发送一个事件到事件队列。
events模块只提供了一个对象:events.EventEmitter。EventEmitter的核心就是事件触发与事件监听器功能的封装。该模块已被node.js默认模块,不需要require()显示引入。
EventEmitter对象如果在实例化时发生错误,会触发’error’事件。当添加新的监听器时,’newListener’时,’removeListener’事件被触发。
- on(event,listener)
为指定事件注册一个监听器,接受一个字符串event和一个回调函数1
2
3
4
5
6
7
8var myEvent = new events.EventEmitter();
var listener = function(){
console.log('someEvent emit');
}
myEvent.on('someEvent',listener);
setTimeout(function(){
myEvent.emit('someEvent');
},1000);
EventEmitter的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter支持若干个事件监听器。
当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。1
2
3
4
5
6
7
8
9
10
11var myEvent = new events.EventEmitter();
myEvent.on('someEvent',function(arg1,arg2) {
console.log('someEvent 1 emit',arg1,arg2);
});
myEvent.on('someEvent',(arg1,arg2)=>console.log('someEvent 2 emit',arg1,arg2));
myEvent.emit('someEvent','arg1','arg2');
/*
输出
someEvent 1 emit arg1 arg2
someEvent 2 emit arg1 arg2
*/
once(event,listener)
为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。1
2
3
4
5
6
7
8
9
10
11var myEvent = new events.EventEmitter();
myEvent.once('someEvent',function(){
console.log('someEvent emit');
});
myEvent.emit('someEvent');
/*
返回true
输出 someEvent emit
*/
myEvent.emit('someEvent');
//返回trueremoveListener(event,listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。1
2
3
4
5
6var myEvent = new events.EventEmitter();
var listener = () => console.log('someEvent emit');
myEvent.on('someEvent',listener);
myEvent.removeListener('someEvent',listener);
myEvent.emit('someEvent');
//返回false
实例
1 | function sel(){ |
程序中var that = this的意义
可以看到,this对象在程序中随时会改变,而var that=this之后,that没改变之前仍然是指向当时的this,这样就不会出现找不到原来的对象。