官方文档中是这么解释Events事件模块的
Node引擎中很多对象都会触发事件:例如net.Server会在每一次有客户端连接到它时触发事件,又如fs.readStream会在文件打开时触发事件。所有能够触发事件的对象都是events.EventEmitter的实例。你可以通过require(“events”);访问这个模块。
起初看到“所有能够触发事件的对象都是events.EventEmitter的实例。”这句很迷茫,也许是翻译不好吧,按照估计,估计也是用KISSY一样,通过继承events.EventEmitter类来实现事件机制的,写了个例子实验下,果不其然,看下面的列子
var util = require("util");
var event = new require("events").EventEmitter;
function Dog(name){
//event.call(this);
//console.log(Dog.super_);
this.name=name;
}
util.inherits(Dog, event);
Dog.prototype.run = function(){
this.emit("run","10M/S");
}
var mimi = new Dog("mimi");
mimi.on("run", function(speed){
console.log(this.name + "is running!!" + speed);
})
mimi.run();
so easy!!
其实你也可以这么理解,当一个类继承了events.EventEmitter,相当于给这个类增加了addListener,removeListener等原型方法。
events.EventEmitter方法
下面简单介绍events.EventEmitter中的方法和属性
addListener(event, listener) or on(event, listener)
将一个监听器添加到指定事件的监听器数组的末尾。
mimi.on("run", function(speed){
console.log(speed);
})
emitter.once(event, listener)
为事件添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除。
mimi.once("die", function(){
console.log("die");
})
removeListener(event, listener)
将监听器从指定事件的监听器数组中移除出去。
//想要移除就不能写匿名函数了
function evtRunFun(){
console.log("remove test");
}
mimi.on("run", evtRunFun);
mimi.run(); // remove test
mimi.removeListener("run",evtRunFun);
mimi.run(); // 不输入remove test
removeAllListeners(event)
将指定事件的所有监听器从监听器数组中移除。
mimi.on("run", function(){
console.log("run");
})
mimi.run();
mimi.removeAllListeners("run");
mimi.run();
setMaxListeners(n)
设置监听器的最大数量。个人觉得没什么用还误导人。
listeners(event)
返回指定事件的监听器数组对象,你可以对该数组进行操作,比如说删除监听器等。
mimi.listeners("run");
console.log(util.inspect(mimi.listeners('run')); // [ [Function] ]
emit(event, [arg1], [arg2], [...])
以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。
Dog.prototype.work = function(){
this.emit("work","a","b","c");
}
mimi.on("work", function(arg1,arg2,arg3){
console.log(arg1,arg2,arg3);
})
mimi.work();//a,b,c
最近评论