Javascript ES6类中的递归

时间:2018-03-11 20:08:53

标签: 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);
    }
    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,但仍然无效。

2 个答案:

答案 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