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不是函数
答案 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')
}
所以,要解决三件事:
util.inherits()
之前移动Auth.prototype
。EventEmitter.call(this)
添加到构造函数中以正确初始化基础对象new Auth()
构建Auth对象的实例,并在该实例上调用方法。