从EventEmitter触发的原型访问属性

我试图写一个简单的类来触发原型函数,当收到一个事件,但我有一个问题与范围。 出于某种原因,我不能访问Stream上下文,即使我已经绑定了我的事件监听器。

 function Stream(report) { this.report = report; this.stream = new api.getTagStream(report.tag); this.stream.on('error', this.onError.bind(this)); this.stream.on('data', this.onData.bind(this)); return this; } Stream.prototype.onError = err => { // Had an error } Stream.prototype.onData = data => { console.log(this.report); // undefined } new Stream({ tag: 'sometag' }); 

onData日志应该显示报表对象,但返回未定义。

用“正常”函数声明replace箭头函数

 function Stream(report, stream) { this.report = report stream.on('error', this.onError.bind(this)) stream.on('data', this.onData.bind(this)) } Stream.prototype.onData = function(data) { console.log(this.report, data) // { tag: 'some tag' } 'some passed data' } const EventEmitter = require('events') const stream = new EventEmitter() new Stream({ tag: 'some tag' }, stream) stream.emit('data', 'some passed data')