我正在学习JavaScript / Nodejs,在研究ES6之前,我决定先从ES5开始。我正在研究原型继承和EventEmitter。
我想用简单的方法扩展EventEmitter,下面是我的代码示例。但是我收到错误:
this.emit('messageRead',message);
TypeError:this.emit不是函数
我在做什么错?
var EventEmitter = require('events').EventEmitter;
var MyEmitter = function() {
EventEmitter.call(this);
this.messages = []
}
MyEmitter.prototype = Object.create(EventEmitter.prototype);
MyEmitter.prototype.constructor = MyEmitter;
MyEmitter.prototype.addMessage = function(message) {
this.messages.push(message)
this.emit('messageAdded', message);
return this;
}
MyEmitter.prototype.readMessages = function() {
this.messages.forEach(function(message){
this.emit('messageRead', message);
});
return this;
}
var emitter1 = new MyEmitter();
emitter1
.addMessage('hello')
.addMessage('goodbye')
.on('messageAdded', function(message) { console.log('message added: ' + message)})
.on('messageRead', function(message) { console.log('message read: ' + message)})
.readMessages();
您必须从EventEmitter继承,而不仅要在MyEmitter实例范围内运行构造函数,而且要继承>
const util = require('util');
...
util.inherits(MyEmitter, EventEmitter);