一、events.EventEmitter
1、All objects that emit events are instances of the EventEmitter class.
(来自:https://nodejs.org/dist/latest-v6.x/docs/api/events.html)
2、EventEmitter.on("hangdle",callback); //注册事件
3、EventEmitter.emit("handle"); //触发事件
4、实现继承的方式
var EventEmitter=require("events");
(1)利用util模块的inherits()方法;
function MyEmitter(){EventEmitter.call(this);}
util.inherits(MtEmitter,EventEmitter);
(2)利用ES6的class和extends关键字实现
class MyEmitter extends EventEmitter {}
(3)通过原型链prototype和__proto__实现
function MyEmitter(){EventEmitter.call(this);}
MyEmitter.prototype.__proto__=EventEmitter.prototype;
5、示例如下: //依次使用方法A、B、C
二、传参和this关键字
1、示例如下: //包含this指针引用内容和参数使用及箭头函数与常规函数的区别
三、实现异步模型 //待研究
1、setImmediate(callback[,args][,...])
Schedules "immediate" execution of
callback
after I/O events' callbacks and before timers set by setTimeOut and setInterval are triggered. 2、proces.nextTick(callback[,args][,...])
It runs before any additional I/O events (including timers) fire in subsequent ticks of the event loop.
3、I/O相关有待研究...
4、process.nextTick 是将异步回调放到当前帧的末尾、io回调之前,如果nextTick过多,会导致io回调不断 延后,最后callback堆积太多.
setImmediate 是将异步回调放到下一帧,不影响io回调,不会造成callback 堆积.
5、示例如下://注:I/O待研究....
四、其他Evnet对象方法
1、.addListener(eventName,callback); //同.on()
2、.once(eventName,callback); //执行一次
3、.listener(eventName); //返回一个连接到eventName事件的监听器函数组
4、setMaxListeners(n); //默认值为10,设置最大监听器数目
5、removeListener(eventName,callback); //将callback函数从EventEmitter对象的eventName事件中删 除
6、emitter.eventNames(); //返回所有已注册事件的名称