Javascript 事件发射器构造函数
我试图了解对象如何成为事件发射器。该文档与以下代码类似:Javascript 事件发射器构造函数,javascript,node.js,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> h
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'
var j=新作业()
未定义
>j.emit(‘测试’)
TypeError:对象#没有方法“emit”
通过Job.prototype=neweventemitter设置原型后代码>似乎按预期工作
我不清楚调用函数在这里做什么,显然是调用EventEmitter的构造函数
> var j = new Job()
undefined
> j.emit('test')
TypeError: Object #<Job> has no method 'emit'
是的,它基本上是一个初始化发射器实例的super
调用。请参见了解它的功能
在设置了原型之后,它似乎按照预期工作
实际上,您需要让您的作业
继承自EventEmitter
。但是你真的,但是
Job.prototype = Object.create(EventEmitter.prototype);
也来看看
我不清楚调用函数在这里做什么,显然是调用EventEmitter的构造函数
> var j = new Job()
undefined
> j.emit('test')
TypeError: Object #<Job> has no method 'emit'
是的,它基本上是一个初始化发射器实例的super
调用。请参见了解它的功能
在设置了原型之后,它似乎按照预期工作
实际上,您需要让您的作业
继承自EventEmitter
。但是你真的,但是
Job.prototype = Object.create(EventEmitter.prototype);
还可以在作业定义下方查看。您可以从EventEmitter继承作业定义,如下所示
util.inherits(Job, EventEmitter);
Job将成为您想要的eventemitter。这是在作业定义下面“扩展”一个“对象”的好方法,您可以从EventEmitter继承如下内容
util.inherits(Job, EventEmitter);
Job将成为您想要的eventemitter。这是使用ES6“扩展”一个“对象”的一个好方法(我使用的是巴别塔,尽管它对于最新节点的大多数功能不是必需的),您可以这样做:
import {EventEmitter} from 'events';
export class Job extends EventEmitter {
constructor() {
super();
}
}
let job = new Job();
使用ES6(我使用的是babel
,尽管它对于最新节点的大多数功能不是必需的),您只需执行以下操作:
import {EventEmitter} from 'events';
export class Job extends EventEmitter {
constructor() {
super();
}
}
let job = new Job();
这对我有用
let events = require('events');
let eventEmitter = new events.EventEmitter();
这对我有用
let events = require('events');
let eventEmitter = new events.EventEmitter();
更重要的是接下来的内容,util.inherits(Job,EventEmitter)代码>。请检查下面更重要的内容,util.inherits(Job,EventEmitter)代码>。请检查我认为我的回答更正确、更标准。只是我的2ct@DevAlien:更正确吗?不是真的-这是util.inherits
在内部所做的。我承认这可能是一种更为“节点”的继承方式,而Object.create
只是一种惯用的纯JavaScript。我认为按照我的回答进行操作更为正确和标准。只是我的2ct@DevAlien:更正确吗?不是真的-这是util.inherits
在内部所做的。我承认这可能是更“节点”的继承方式,而Object.create
只是惯用的纯JavaScript。@JasonLiveasay导入{EventEmitter}与“events”有什么区别;从@angular/core'@Roxy'Pro,他们询问的是Node.js(服务器端),而不是angular(客户端)。而且,这是四年前的事了——不确定这是否仍然是与Node.js相关的最佳答案。但是您需要尝试找到一个特定于您正在使用的Angular JS版本的答案。@JasonLiveasay导入{EventEmitter}与“events”的区别是什么;从@angular/core'@Roxy'Pro,他们询问的是Node.js(服务器端),而不是angular(客户端)。而且,这是四年前的事了——不确定这是否仍然是与Node.js相关的最佳答案。但是您需要尝试找到一个特定于您正在使用的Angular JS版本的答案。