function MyStream() {
//events.EventEmitter.call(this);//call方法使得MyStream对象继承了EventEmitter对象上的方法
}
util.inherits(MyStream, events.EventEmitter);//使用inherits方法
这是网上流传已久的例子,我想构造函数中的那一句代码是必须的吗?有何作用?我发现我注掉那一行程序也是可以正常运行的~
inherited是基与原型的继承,call是基于对象继承,可以获取对象方法
可以看一下 events 模块的源码:
https://github.com/joyent/node/blob/828f14556e0daeae7fdac08fceaa90952de63f73/lib/events.js#L43
EventEmitter 的初始化最初是没有内容的,后来引入 domain 特性时才增加了这个 init
https://github.com/joyent/node/commit/963459d736d6594de641aff4d8767da113359457#diff-4
也就是说,只要没有用到 domain 模块,就可以不用 call 这个 constructor
文档里有讲 domain 对 EventEmitter 的影响: http://nodejs.org/api/domain.html#domain_implicit_binding
谢谢,获益匪浅~
node的domain是捕获最近的错误异常的,以至于不会被冒泡到最顶部而被process.on(‘uncaughtException’)捕获,用于响应500,良好体验,domain.createDomain()的on,once,emit应该是继承与EventEmitter.prototype