事件发射器是Node里除了回调函数外的另一十分重要的异步编程技术。 在MFC等图形界面编程库中,事件发射器是非常常见的,比如,鼠标点击事件,点击了鼠标后,就会触发鼠标点击后的函数——事件发射器触发事件,并且在事件被触发后处理它们。在Node API组件中,如HTTP服务器、TCP服务器等都被做成了事件发射器,所以掌握事件发射器的编程方法,是非常重要的。
使用on添加监听器
步骤:
-
声明事件发射器类
-
创建事件发射器对象
-
使用on添加事件发射器
-
使用emit发射事件
1
2
3
4
5
6
7
8
9
10
11
12
13 1//事件发射器类声明
2var EventEmitter = require("events").EventEmitter;
3//创建事件发射器
4var emitter = new EventEmitter();
5
6//使用on添加监听器
7emitter.on("hello",function(){
8 console.log("Hello");
9});
10
11//使用emit函数发射事件
12emitter.emit("hello");
13
使用addListener添加事件
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13 1//事件发射器类声明
2var EventEmitter = require("events").EventEmitter;
3//创建事件发射器
4var emitter = new EventEmitter();
5
6//使用addListener添加监听器
7emitter.addListener("hello",function(){
8 console.log("Hello");
9});
10
11//使用emit函数发射事件
12emitter.emit("hello");
13
注册带参数的事件监听器
注册的监听器可直接带上参数,在emit发射事件时,添加上对应的参数即可。示例:
1
2
3
4
5
6
7
8
9
10
11
12
13 1//事件发射器类声明
2var EventEmitter = require("events").EventEmitter;
3//创建事件发射器
4var emitter = new EventEmitter();
5
6//使用on添加监听器
7emitter.on("hello",function(name,age){
8 console.log(name+" is "+age);
9});
10
11//使用emit函数发射事件
12emitter.emit("hello","king","21");
13
移除事件发射器
使用removeAllListeners移除hello事件所有的监听器,使用removeListener移除hello事件特定的监听器,示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 1//事件发射器类声明
2var EventEmitter = require("events").EventEmitter;
3//创建事件发射器
4var emitter = new EventEmitter();
5
6//使用on添加监听器
7emitter.on("hello",function(name,age){
8 console.log(name+" is "+age);
9});
10
11//使用emit函数发射事件
12emitter.emit("hello","king","21");
13
14//添加移除监听器的事件
15emitter.on("quit",function(name){
16 emitter.removeAllListeners(name) ; //移除名字为name的事件监听器
17});
18//移除hello这一事件
19emitter.emit("quit","hello");
20
21//再调用一次看看效果(不会有任何效果,因为现在已经没有hello这个事件的监听器了)
22emitter.emit("hello","king","21");
23