事件发射器构造函数
我想了解对象如何成为事件发射器。 该文档与以下代码类似:
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
调用,它初始化发射器实例。 另请参见这两个构造函数模式有什么区别? 为了什么。
设置原型后,似乎按预期工作。
的确,你需要让你的Job
从EventEmitter
inheritance。 但是,你真的不应该在这里使用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();