这是我的previous SO question的后续。在这个问题中,我定义了一个包含index.js事件处理程序的on文件。从那以后,我更新了index.js文件如下:
index.js
const EventEmitter = require('events');
const Student = require('./student');
const Whiteboard = require('./whiteboard');
class Classroom {
constructor() {
this.whiteboard = new Whiteboard();
}
async function start() {
eventEmitter.on('newListener', (event, listener) => {
console.log(`Added ${event} listener.`);
});
eventEmitter.on('handRaised', (question) => {
console.log(question);
this.whiteboard.write(question);
});
for (let i=0; i<10; i++) {
let student = new Student(`Student #${i+1}`);
student.attend();
}
}
}当我运行我的应用程序时,使用this.whiteboard.write(question);的行会生成一个错误。这个错误是:Cannot read property 'write' of undefined。我已经确认this.whiteboard是未定义的。我的问题是,如何访问事件的类属性?
谢谢!
发布于 2019-03-19 12:33:55
使用this.whiteboard应该没有问题,但是类定义很奇怪,实际上,我希望通过方法定义实现SyntaxError。
尝试像这样修改代码:
const EventEmitter = require('events');
const Student = require('./student');
const Whiteboard = require('./whiteboard');
const eventEmitter = new EventEmitter(); /* create an emitter instance */
class Classroom {
constructor() {
this.whiteboard = new Whiteboard();
}
async start() { /* no 'function' here */
eventEmitter.on('newListener', (event, listener) => {
console.log(`Added ${event} listener.`);
});
eventEmitter.on('handRaised', (question) => {
console.log(question);
this.whiteboard.write(question);
});
for (let i=0; i<10; i++) {
let student = new Student(`Student #${i+1}`);
student.attend();
}
}
}编辑:EventEmitter的实例
发布于 2019-03-19 12:07:53
在任何事件的回调中,您的this都不会指向您的类。尝尝这个。
var self = this;
eventEmitter.on('handRaised', (question) => {
console.log(question);
self.whiteboard.write(question);
});https://stackoverflow.com/questions/55240576
复制相似问题