javascript - 访问类中的构造函数属性

标签 javascript class scope ecmascript-6 this

当涉及到对象变量时,我不理解 JavaScript 作用域。我定义了以下类:

class DataHandler {
  constructor(boardIDA, boardIDB, accessToken, eventA, eventB) {
    this.times = [];
    this.eventA = eventA;
    this.eventB = eventB;
    this.apiURLA = "https://api.particle.io/v1/devices/" + boardIDA + "/events/" + eventA + "/?access_token=" +
      accessToken;
    this.apiURLB = "https://api.particle.io/v1/devices/" + boardIDB + "/events/" + eventB + "/?access_token=" + accessToken;
    this.eventListenerA = new EventSource(this.apiURLA);
    this.eventListenerB = new EventSource(this.apiURLB);
    this.addListener(this.eventListenerA,
      eventA);
    this.addListener(this.eventListenerB, eventB);
  }
  addListener(eventSrc, eventName) {
    eventSrc.addEventListener(eventName, function(info) {
      alert(eventName);
      var parsedData = JSON.parse(info.data);
      this.times.push(parsedData);
    });
  }
}

问题出在 this.times 。我已经在构造函数中声明了它。但是,我似乎无法在 addListener 中访问它— 我收到一条错误消息,说我正在尝试调用 pushundefined 。我做错了什么?

最佳答案

您没有在 addListener 中访问它,而是尝试在匿名事件处理程序中访问它,该处理程序使用不同的 this 进行调用。

addListener(eventSrc, eventName) {
  var handler = function(info) {
    alert(eventName);
    var parsedData = JSON.parse(info.data);
    this.times.push(parsedData);
  };
  eventSrc.addEventListener(eventName, handler.bind(this));
}

关于javascript - 访问类中的构造函数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41557929/

相关文章:

javascript - 如何在 angularjs 中使用 ng-repeat 显示 JSON 数组?

javascript - 如何使用按钮更改文本颜色

PHP文件/类名冲突

java - Java 中的可变范围效率

javascript - 为什么我无法获取 this.refs.children 元素?

javascript - Sails.js 在 js 文件更改时运行 Assets 管道

c++ - 继承时预期结果不起作用?

java - 是否可以将整数从方法链接到类?

scala - 在 DSL 中隐藏和限定隐式变量的创建

python - 如何在 Python 中创建模块范围的变量?