Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Классы и методы (https://javascript.ru/forum/jquery/72401-klassy-i-metody.html)

Dark Souls 26.01.2018 16:53

Классы и методы
 
Любезные гуру, есть код:
class getData(args)
{
    constructor() {
        $.ajax({
            // какой-то запрос
            success: function (data) {
                _itr_data(data);
            }
        })
    }

    _itr_data(data) {
        // что-то делает
    }

    // Как из конструктора запустить метод класса?

    this._itr_data(data) // не работает
    self._itr_data(data) // тоже не работает
    // _itr_data is not defined
    
}

Подскажите плиз. Классы только ковыряю.

Nexus 26.01.2018 17:01

Может так?
class getData {
    constructor() {
        var inst = this;
        $.ajax({
            // какой-то запрос
            success: function(data) {
                inst._itr_data(data);
            }
        })
    }

    _itr_data(data) {
        // что-то делает
    }
}

Dark Souls 26.01.2018 17:06

Данке шон! :) Работает. только не совсем понял как...

Nexus 26.01.2018 17:18

В конструкторе класса сохраняю ссылку на этот класс (строка 3) и обращаюсь к методу этого класса из callback-функции "success" jQ.
Сохранил ссылку потому что в калбэке "this" уже не будет указывать на класс "getData".

Dark Souls 26.01.2018 17:28

Тоесть, если я правильно понял, есть смысл сразу создать константу со ссылкой на класс и далее спокойно ее юзать или всеже лучше ее определять в конструкторе?

вопрос отпал. константу можно определить только в конструкторе. Спасибо еще раз! :)

Aetae 26.01.2018 17:48

class getData {
    constructor() {
        $.ajax({
            // какой-то запрос
            success: data => this._itr_data(data)
        })
    }
 
    _itr_data(data) {
        // что-то делает
    }
}

Если используете новомодную классовую хренотень, то и стрелочки использовать можете, а оные автоматически решают данный вопрос.

Dark Souls 26.01.2018 17:58

спасибо! Действительно работает. не знал :)


Часовой пояс GMT +3, время: 08:44.