事件发射器构造函数

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

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;设置原型之后Job.prototype = new EventEmitter; 似乎按预期工作。

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

是的,它基本上是一个super调用,它初始化发射器实例。 另请参见这两个构造函数模式有什么区别? 为了什么。

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

的确,你需要让你的JobEventEmitterinheritance。 但是,你真的不应该在这里使用new ,而是

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

也看看Node.js – 从EventEmitterinheritance 。

在Job定义之下,你可以inheritanceEventEmitter,如下所示

 util.inherits(Job, EventEmitter); 

工作将成为一个eventemitter你想要的。 这是“扩展”“对象”的好方法,

使用ES6(我使用babel虽然它不需要大多数function与最新的节点),你可以这样做:

 import {EventEmitter} from 'events'; export class Job extends EventEmitter { constructor() { super(); } } let job = new Job();