Обратный вызов метода класса SignalR и 'this'

У меня был похожий вопрос, но не тот же. В этой статье рассматривается новое ключевое слово класса ES6 и способы его обработки. SignalR вызывает метод класса. Внутри этого метода класса "this" ссылается на концентратор SignalR, а не на сам экземпляр класса. Как я могу получить экземпляр класса внутри этого члена класса, который SignalR вызвал, используя новые классы ES6?

class gameLoad {
    constructor(){

    }

    init(){
        // create the network object and hook it's functions update for loading
        this.network = $.connection.testHub;
        this.network.client.hello = this.sayHello;
    }

    // this is called from signalR and 'this' now refers to the signalR hub inside this function. how can I get the class instance?
    sayHello(){
        console.log(this);    // 'this' refers to signalR object not gameLoad object
    }

    create(){
        var self = this;
        $.connection.hub.start().done(function () {
            console.log("Started!")
            console.log("Calling server function.");

            // make our first network call which will turn around and call client.hello which is bound to this classes sayHello() member function
            self.network.server.hello();
        });
    }
}

1 ответ

Решение

При использовании классов лучше всего использовать функции стрелок, чтобы правильно установить "this".

В вашем примере вы назначаете sayHello методу приветствия клиента. Вам нужно привязать к нему gameLoad:

this.network.client.hello = this.sayHello.bind(gameLoad);

Кроме того, вы можете преобразовать sayHello в функцию стрелки:

sayHello = () => {
Другие вопросы по тегам