ES5中扩展节点的EventEmitter

问题描述 投票:0回答:1

我正在学习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();
node.js prototype ecmascript-5 eventemitter
1个回答
0
投票

您必须从EventEmitter继承,而不仅要在MyEmitter实例范围内运行构造函数,而且要继承>

const util = require('util');
...
util.inherits(MyEmitter, EventEmitter);
© www.soinside.com 2019 - 2024. All rights reserved.