mcmraak
@mcmraak
php+sql+js+bicycle+crutches

Как вызвать функцию js в этом случае?

Помогите пожалуйста, плохо понимаю область видимости. Как мне вызывать эту функцию, пишет что она не определена, видимо потому что она внутри jQuery ajax-функции?
function foo()
{
    this.baz = function()
    {
        //...
    };
    this.bar = function()
    {
        $.ajax({
            success: function (html)
                {
                    this.baz(); //<-- Как вызвать
                }
        });
    };
}
  • Вопрос задан
  • 157 просмотров
Решения вопроса 2
function foo()
{
  this.baz = function(){
  
  }
  this.bar = function()
  {
    var that = this; //<-- Вот так, как вариант
    $.ajax({
       success: function (html)
                {
          that.baz(); //<-- that
        }
    });
  }
}
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
ES5
function Foo() { //конструкторы пишем с большой буквы
 //...
}

//методы пишем в прототип
Foo.prototype = {
  baz: function() {
    //...
  },
  bar: function() {
    var $this = this;
    $.ajax({
      success: function(html) {
        $this.baz();
      }
    });
  }
};


ES2015
class Foo {
  constructor() {
    //...
  }
  baz() {
    //...
  }
  bar() {
    $.ajax({
      success: html => {
        this.baz();
      }
    });
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DirecTwiX
@DirecTwiX
"display: flex;" уже предлагали?
function foo()
{
  this.function baz(){
  
  }
  this.function bar()
  {
    $.ajax({
       success: (html) =>
                {
          this.baz(); //<-- Как вызвать
        }
    });
  }
}

Стрелочные функции не имеют своего this.

Про контекст, его потерю и привязку рекомендую прочитать вот это:
https://learn.javascript.ru/bind

Для полного понимания можно прочитать и вот это:
https://learn.javascript.ru/call-apply
https://learn.javascript.ru/decorators
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы