事件发射器构造函数

时间:2015-09-16 21:29:04

标签: javascript node.js

我试图了解对象如何成为事件发射器。该文档与以下代码类似:

var EventEmitter = require('events').EventEmitter;

function Job(){
  EventEmitter.call(this);
}

我不清楚调用函数在这里做了什么,显然调用了EventEmitter的构造函数?

> var j = new Job()
undefined
> j.emit('test')
TypeError: Object #<Job> has no method 'emit'

通过Job.prototype = new EventEmitter;设置原型后似乎按预期工作。

4 个答案:

答案 0 :(得分:2)

  

我不清楚调用函数在这里做了什么,显然调用了EventEmitter的构造函数?

是的,它基本上是一个初始化发射器实例的super调用。另请参阅What is the difference between these two constructor patterns?了解它的作用。

  

设置原型后,它似乎按预期工作。

确实,您需要让Job继承EventEmitter。但是,你真的是should not use new here,而是

Job.prototype = Object.create(EventEmitter.prototype);

另请查看Node.js - inheriting from EventEmitter

答案 1 :(得分:0)

在Job定义下面,您可以从EventEmitter继承如下

util.inherits(Job, EventEmitter);

约会将成为你想要的平衡器。这是“扩展”“对象”的好方法

答案 2 :(得分:0)

使用ES6(我使用babel虽然对于大多数使用最新Node的功能不是必需的)但您可以这样做:

import {EventEmitter} from 'events';

export class Job extends EventEmitter {
  constructor() {
    super();
  }
}

let job = new Job();

答案 3 :(得分:0)

这对我有用

let events = require('events');
let eventEmitter = new events.EventEmitter();