我试图在Javascript ES6类的方法中调用相同的方法,但它无法正常工作。
class Client {
constructor(connection) {
this.channels = [];
this.nickname = null;
this.user = null;
this.realName = null;
connection.on('data', this.parse_message);
}
parse_message(message) {
let messageObject = {};
if (message.includes('\r\n')) {
message = message.split('\r\n');
message.forEach((el) => {
this.parse_message(el);
});
}
else {
message = message.split(' ');
console.log('Message Received: ', JSON.stringify(message));
}
}
}
运行时我收到此错误TypeError: this.parse_message is not a function
。我尝试将this
分配给顶部的变量self
,但仍然无效。
答案 0 :(得分:2)
将箭头函数作为绑定处理程序传递,以便您可以保留与该方法关联的this
。
connection.on('data', (...args) => this.parse_message(...args));
现在this
回调中的forEach
将是预期值。
答案 1 :(得分:0)
您可以在构造函数中使用bind:
this.parse_message = this.parse_message.bind(this);
绑定-REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind