首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js EventEmitter‘see’事件不能“查看”类属性

Node.js EventEmitter‘see’事件不能“查看”类属性
EN

Stack Overflow用户
提问于 2019-03-19 12:00:55
回答 2查看 383关注 0票数 2

这是我的previous SO question的后续。在这个问题中,我定义了一个包含index.js事件处理程序的on文件。从那以后,我更新了index.js文件如下:

index.js

代码语言:javascript
复制
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是未定义的。我的问题是,如何访问事件的类属性?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-03-19 12:33:55

使用this.whiteboard应该没有问题,但是类定义很奇怪,实际上,我希望通过方法定义实现SyntaxError

尝试像这样修改代码:

代码语言:javascript
复制
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实例

票数 0
EN

Stack Overflow用户

发布于 2019-03-19 12:07:53

在任何事件的回调中,您的this都不会指向您的类。尝尝这个。

代码语言:javascript
复制
var self = this;
eventEmitter.on('handRaised', (question) => {
  console.log(question);
  self.whiteboard.write(question);
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55240576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档