events.EventEmitter.call(this); 初始化父类的功能, 跟 super()是一个意思.不想看废话的就不用往下看了
var events = require('events');
var util = require('util');
var a = function () {
events.EventEmitter.call(this);
};
util.inherits(a, events.EventEmitter);
console.log(a, new a())
---- 输出 -----
[Function: a] a {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined }
针对上面的代码我说下我的理解
util.inherits(a, events.EventEmitter); 该代码很容易理解, 就是 a类 继承了 events.EventEmitter
events.EventEmitter.call(this); 这个是干嘛的呢? 我们来看下
我们首先去掉了 events.EventEmitter.call(this);
var events = require('events');
var util = require('util');
var a = function () {};
util.inherits(a, events.EventEmitter);
console.log(a, new a())
---- 输出 -----
{ [Function: a]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: false,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } } a {}
很明显是不一样的,a 对象并没有获得父类的属性和方法;那就多半说明没有调用父类的初始化函数;事实上也是一样。 var a = function () {}; 相当于 class b extends events.EventEmitter { constructor(){} } 没有调用父类一样。而正确写法就是 class b extends events.EventEmitter { constructor(){ super();} } 所以 var a = function () { events.EventEmitter.call(this);}; 就是初始化父类的意思。。js的语法无力吐槽。