今天大象哥看了下nodejs的事件,写了几个nodejs事件的例子,先说下事件
Node里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。 你可以通过require("events");来访问该模块
//引入events模块
var events = require("events");
//实例化events.EventEmitter对象
var event = new events.EventEmitter();
//添加自定义事件
event.on("myevent",function(){
console.log("我定义的事件");
})
//使用事件
event.emit("myevent");
下面一些事件方法
删除一个事件
event.removeListener("myevent",function(){
console.log("现在删除这个once_event事件");
});
//删除所有事件,或者删除某些事件
event.removeAllListeners("myevent");
//添加一个一次性事件,事件被触发后就被删除
event.once("once_event",function(){
console.log("这是个一次性事件,事件被触发后就被删除");
});
//触发一次性事件
event.emit("once_event");
//返回指定事件的listener数组
console.log(event.listeners('myevent'));
下面给我们的对象添加事件
var util = require("util");
var events = require("events");
//让MyEvent继承event.EventEmitter,使用的是util.inherits这个工具来继承
function MyEvent() {
events.EventEmitter.call(this);
}
util.inherits(MyEvent, events.EventEmitter);
//MyEvent类的write方法触发了data这个事件
MyEvent.prototype.write = function(data) {
this.emit("data", data);//触发DATA事件
return this;//返回对象,方便链式调用
}
//实例化MyEvent对象,
var myevent = new MyEvent();
//监听myevent的data事件
myevent.on("data",function(data){
console.log("事件的回调:"+data);
});
//用write方法触发data事件
myevent.write("一个操作后,触发了MyEvent对象的data事件");