Javascript ES6类中的递归
我试图在Javascript ES6类的方法中调用相同的方法,但它不起作用Javascript ES6类中的递归,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我试图在Javascript ES6类的方法中调用相同的方法,但它不起作用 class Client { constructor(connection) { this.channels = []; this.nickname = null; this.user = null; this.realName = null; connection.on('data', this.parse_message);
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\u消息不是函数
。我尝试将this
分配给顶部的变量self
,但仍然不起作用 传递一个arrow函数作为绑定处理程序,这样您就可以将此
与该方法关联起来
connection.on('data', (...args) => this.parse_message(...args));
现在,您的
forEach
回调中的this
将是预期值。您可以在构造函数中使用bind:
this.parse_message = this.parse_message.bind(this);
绑定参考:
请说明如何调用此函数/从类中创建新对象。什么是连接?@Sébastien如果我没有正确理解,我很抱歉,但是正在构造函数中的'connection.on('data',this.parse_message);'处调用parse_message方法如果你认为我应该发布的话,客户端类是在一个单独的类中创建的?没有必要,我认为@doodlemeister的想法是正确的。谢谢!如果你不介意向我解释(…args)部分,那就太棒了。我有点像ES6Noob。@IsiahL:当然,在函数参数的位置,这只是一种从该点开始收集所有参数的方法。所以它被称为“rest”参数,因为它提供了传递的其余参数的数组。在呼叫站点,它做相反的事情;它将参数数组传递给被调用的函数,但将它们作为单个参数而不是集合传递。它被称为“扩展”语法,因为它将数组的内容“扩展”到被调用的函数中。