当涉及到对象变量时,我不理解 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
中访问它— 我收到一条错误消息,说我正在尝试调用 push
上undefined
。我做错了什么?
最佳答案
您没有在 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/