我不知道如何更正方法的上下文。
我有这个班:
export default class Handler {
constructor() {
// init
}
handleMessage(channel, user, message) {
this.handleDefault(channel, user, message);
}
handleDefault(chanenl, user, message) {
// do stuff
}
}
它被这个方法和类调用
export default class Bot {
constructor() {
this.irc = irc // has an event emitter irc.event
this.handler = new Handler();
this.readIRC();
}
readIRC() {
this.irc.event.on('message', this.handler.handleMessage);
}
}
问题出在handleMessage内的第一个类中,这不再是类,而是eventEmitter,所以我不能调用我的handleDefault方法。
如何在ES6中正确处理上下文?
您只需要将handleMessage
绑定到this.handler
,或者使用
-
Function.prototype.bind
this.irc.event.on('message', this.handler.handleMessage.bind(this.handler));
-
或具有箭头功能,
this.irc.event.on('message', () => this.handler.handleMessage());
在这两种情况下,当message
事件调用handleMessage
函数时,handleMessage
中的this
将引用this.handle
对象。
如果您想将参数传递给事件处理程序,可以定义如下所示的箭头函数
this.irc.event.on('message', (err, msg) => this.handler.handleMessage(err, msg));