Несмотря на годы разработки, для многих разработчиков ключевое слово this по сей день остается загадкой.
Согласно терминологии таких языков, как Java, PHP или других, this - это экземпляр текущего объекта в методе класса. this нельзя использовать вне метода; и такой простой подход не создает путаницы.
В JavaScript ситуация иная: this - это контекст вызова функции. Существует 4 типа вызова функций:
- вызов функции: alert('Привет, Мир!')
- вызов метода: console.log('Привет, Мир!')
- вызов конструктора: new RegExp('\\d')
- непрямой вызов: alert.call(undefined, 'Привет, Мир!')
Каждый тип вызова по-своему определяет контекст, поэтому поведение this отличается от ожидаемого разработчиком.
Более того, строгий режим 'use strict' также влияет на контекст выполнения.
Ключом к пониманию ключевого слова this является четкое представление о вызове функции и о том, как он влияет на контекст.
В мануале основное внимание уделяется объяснению вызова, тому, как вызов функции влияет на this, и демонстрируются распространенные ошибки определения значения this.
Перед тем как читать дальше, ознакомимся с парой терминов:
- Вызов функции - это выполнение кода, составляющего тело функции, т.е. простыми словами - сама функция. Например, parseInt('15') - это вызов функции parseInt.
- Контекст вызова - это значение this в теле функции.
- Область видимости функции - это набор переменных и функций, доступных в теле функции.