Node.JS:Event Emmiter

时间:2016-06-28 23:29:47

标签: javascript node.js inheritance eventemitter

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不是函数

1 个答案:

答案 0 :(得分:1)

您需要创建一个实例。

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. 在将任何内容分配给util.inherits()之前移动Auth.prototype
  2. EventEmitter.call(this)添加到构造函数中以正确初始化基础对象
  3. 使用new Auth()构建Auth对象的实例,并在该实例上调用方法。