我试图了解对象如何成为事件发射器。该文档与以下代码类似:
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;
设置原型后似乎按预期工作。
答案 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);
答案 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();