我无法弄清楚如何纠正方法的背景。
我有这堂课:
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中正确使用上下文?
答案 0 :(得分:4)
您必须使用
将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());
在这两种情况下,当handleMessage
事件上调用message
函数时,this
中的handleMessage
将引用this.handle
对象。
如果您想将参数传递给事件处理程序,可以像这样定义箭头函数
this.irc.event.on('message', (err, msg) => this.handler.handleMessage(err, msg));