繁体   English   中英

Node.JS:事件发射器

[英]Node.JS: Event Emmiter

function Auth() {
  console.log('Created!')
}
Auth.prototype.authenticate = function () {
  // do stuff
  this.emit('completed')
}
util.inherits(Auth, EventEmitter)

如何在其他函数中调用Auth.emit('someEvent')? 例如:

function someOther () {
  //do stuff
  Auth.emit('event')
}

它抛出一个错误:

Auth.emit不是函数

您需要创建一个实例。

var myAuthObj = new Auth();
myAuthObj.authenticate(...);

原型上的方法是“实例”方法。 它们可以直接在对象的实例上调用。

您也可以创建“静态”方法(以不同的方式,它们实际上只是分配给名称空间对象的普通函数),但是它们不能使用this或继承的对象,因为只有当您使用new实例化实际对象时,这些方法才被放置到位。还有你的构造函数

您还需要将util.inherits()移到原型分配的前面。 util.inherits()语句替换了原型,因此,如果事后这样做,则将刚刚分配给原型的内容清除掉。 并且,您也应该调用父对象的构造函数。

function Auth() {
  EventEmitter.call(this);
  console.log('Created!')
}

util.inherits(Auth, EventEmitter);

Auth.prototype.authenticate = function () {
  // do stuff
  this.emit('completed')
}

因此,需要解决的三件事:

  1. 将任何东西分配给Auth.prototype之前,请移动util.inherits()
  2. EventEmitter.call(this)添加到构造函数中以正确初始化基础对象
  3. 使用new Auth()构造Auth对象的实例,并在该实例上调用方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM