/** * Created by admin on 2017/11/1. */ //Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件 // 1.事件绑定与触发 //引入Events模块 var events = require('events'); //创建eventEmitter对象 var eventEmitter = new events.EventEmitter(); function eventHandler() { console.log("eventname事件监听处理函数"); } //绑定事件和处理程序 ,eventName是事件类型 eventEmitter.on('eventName', eventHandler); //触发事件 eventEmitter.emit('eventName'); // 2.对于每个事件,EventEmitter 支持若干个事件监听器。 //当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。 function callback(arg1, arg2) { console.log("触发someEvent事件" + arg1 + " " + arg2); } eventEmitter.addListener('someEvent111',callback); eventEmitter.on('someEvent111', function (arg1, arg2) { console.log("触发someEvent事件1 " + arg1 + " " + arg2); }); eventEmitter.emit('someEvent111', 'arg1', 'arg2'); eventEmitter.removeListener('someEvent111', callback); console.log("listener1 不再受监听。"); eventEmitter.emit('someEvent111', 'arg1', 'arg2');
//eventEmitter对象方法总结: //添加监听:①on(event, listener) ②addListener(event, listener) ③once(event, listener)监听器最多只会触发一次.PS:感觉事件名可以随便写,只要和emit中对应就行 //移除监听:①removeListener(event, listener) ②removeAllListeners([event])移除所有事件的所有监听器,如果指定事件,则移除指定事件的所有监听器。 //其他:setMaxListeners(n)用于提高监听器的默认限制(10)的数量,超过n发出警告。 //其他:emit(event, [arg1], [arg2], [...])按参数的顺序执行每个监听器,如果事件有注册监听返回true,否则返回 false。 //其他:listeners(event)返回指定事件的监听器数组。 // 3.类方法调用demo var count = events.EventEmitter.listenerCount(eventEmitter, 'someEvent111'); console.log("someEvent111的监听器数量为:" + count);
//类方法:listenerCount(emitter, event)返回指定事件的监听器数量。 //事件监听:当添加新的监听器时,newListener(event, listener)事件会触发,当监听器被移除时,removeListener(event, listener)事件被触发。 // 4.一般要为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃 var events = require('events'); var emitter = new events.EventEmitter(); //注册error事件,否则无法输出53行 emitter.on("error",function (arg1) { console.log("error:"+arg1); }); emitter.emit('error'); console.log("error事件发生,未中断退出程序"); // 5.大多数时候我们不会直接使用EventEmitter,而是在对象中继承它。 // 包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。 //为什么要这样做呢?原因有两点: //首先,具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。 //其次JavaScript的对象机制是基于原型的,支持部分多重继承,继承 EventEmitter不会打乱对象原有的继承关系。