javascript ES6类/方法范围
javascript ES6 class/method scope
我不知道如何更正方法的上下文。
我有这个班:
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));
相关文章:
- 如何创建一个方法来验证数组的范围
- JavaScript对象范围-在对象方法中使用对象变量
- 如何测试只在闭包范围中可见的javascript方法
- 在 JavaScript 中获取范围的随机数的最佳方法
- Vue.js 在方法内失去范围
- 是否可以对超出范围的 setInterval 变量调用 clearInterval 方法
- 如何在 javascript 中更改方法调用的全局范围
- 在日期范围内查找丢失日期的最有效方法是什么
- 是否有任何方法可以访问外部范围's变量
- 当生成正态分布的随机值时,定义范围的最有效方法是什么
- javascript ES6类/方法范围
- AngularJs,DropZone.Js - 有没有人想出一种方法来将Dropzone传输保留在Angular根范围内
- Javascript 对象方法范围 - 方法失败
- 谷歌地图变量的范围和调用方法
- jQuery插件样板 - 具有绑定范围的私有方法
- javascript/dojo方法范围
- TypeScript中的Mongoose方法范围
- 成功当$http post在方法范围内时未调用回调
- 从c++调用qml - javascript中的方法.范围的问题
- 如何从一个's在其方法范围内