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);

我试图在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\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”参数,因为它提供了传递的其余参数的数组。在呼叫站点,它做相反的事情;它将参数数组传递给被调用的函数,但将它们作为单个参数而不是集合传递。它被称为“扩展”语法,因为它将数组的内容“扩展”到被调用的函数中。