ООП javascript из AJAX «оператора» в методе, как вызвать другой метод класса? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть этот простой класс:

class myCustomClass{

    foo(value){
        //do some stuff
    }

    faa(){
        //do some stuff
        $.getJSON( someUrl, function(data) {
            // how call the method foo(value) here ?
            this.foo('fii'); // error occured here, because 'this' is not in 'class' context        
        }
    }
}

Как я могу использовать метод 'foo (value)' в методе faa, когда я использую оператор AJAX? Я не могу использовать просто this.foo (значение) здесь, потому что контекст this в выражении AJAX - это не контекст класса (а контекст AJAX)

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Обычно я делаю это таким образом,

class myCustomClass {

foo(value){
    //do some stuff
}

faa(){
var me=this;
    //do some stuff
    $.getJSON( someUrl, function(data) {
        // how call the method foo(value) here ?
        me.foo('fii'); // error occured here, because 'this' is not in 'class' context        
    }
}
0 голосов
/ 14 ноября 2018

Вам необходимо «кэшировать» ссылку на класс во внешней области видимости, чтобы ее можно было использовать во внутренней области видимости обратного вызова AJAX, например:

faa() {
  var _class = this; // cache class reference here

  // do some stuff

  $.getJSON(someUrl, function(data) {
    _class.foo('fii'); // use it here
  });
}

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

faa() {
  // do some stuff

  $.getJSON(someUrl, (data) => {
    this.foo('fii'); // use it here
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...