Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 事件发射器构造函数_Javascript_Node.js - Fatal编程技术网

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版本的答案。