小记 events.EventEmitter.call

博客围绕events.EventEmitter.call(this)展开,指出其作用是初始化父类功能,与super()意思相同。还通过去掉该代码对比,说明若不调用会使对象无法获得父类属性和方法,并以类继承为例进一步解释其原理。

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的语法无力吐槽。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值