@damn_everyday

Поведение this в анонимной функции?

У меня есть объект.
В объекте - методы. Когда я использую this внутри метода в качестве ссылки на мой объект, всё работает, как и должно.

Но если в методе моего объекта есть анонимная функция и внутри неё я пытаюсь использовать this, то получаю ошибку.
Почему так?
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
@0ffff0
Ошибка происходит из-за того, что по умолчанию, контекстом функции является объект window, функция внутри метода, имеет контекст по умолчанию, и в указателе this лежит это значение.
Исправляется принудительным назначением контекста.
Пример:
var obj = {a:"a"}; // предположим это ваш объект
obj.method = function(){return function(context){console.log(this)}}; // и метод объекта возвращающий безымянную функцию 
test = obj.method() // создаём ссылку на реультат работы метода возвращающего безымянную функцию и получаем безымянную-поименованную функцию,  ее имя теперь   - test

//обращаемся к функции по ссылке, и привязываем к ней конкретный контекст
test.call(obj); // консоль: Object { a: "a", method: method() }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Тыб привел кусок кода, чтоб не на пальцах показывать
https://learn.javascript.ru/functions-closures
https://learn.javascript.ru/object-methods

А вообще лучше всего про this контекст и синтаксическую область видимости у Фленегана расписано, рекомендую прочитать от корки до корки
https://play.google.com/store/books/details/David_...

const a = {
  method_1: function(a) {
    console.log("1", this)
    const func = function() {
      console.log("2", this)
    }
    func()
  },
  somevar: "TEST"
}
a.method_1();


Если так, то лучше использовать стрелочную функцию, потому что "синтаксическая боласть видимости"
Ответ написан
Ваш ответ на вопрос

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

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