nodejs事件编程详解

今天大象哥看了下nodejs的事件,写了几个nodejs事件的例子,先说下事件

Node里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。 你可以通过require("events");来访问该模块



可以看出我们的事件是定义在events.EventEmitter 的实例,所以我们先实例化这个类
//引入events模块
var events = require("events");
//实例化events.EventEmitter对象
var event = new events.EventEmitter();



有了事件对象后我们就可以添加自定义的事件了
//添加自定义事件
event.on("myevent",function(){
	console.log("我定义的事件");
})



我们定义了一个myevent事件,下面我们使用它
//使用事件
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事件");




你可能感兴趣的:(nodejs事件编程详解)