Правила визначення this
Якщо говорити про звичайну функцію (не стрілкову), то значення контексту визначається не на момент створення функції, а на момент виклику.
this і глобальна область видимості
Якщо скрипт виконується не в суворому режимі, то this посилається на об'єкт window. В суворому режимі this, в глобальній області видимості, буде undefined.
"use strict"; // Суворий чи не суворий режим
function myFunc() {
console.log(this);
}
myFunc(); // window or undefinedthis і методи об'єкта
Якщо функція є методом обʼєкта, то контекст посилатиметься на сам обʼєкт в якому і міститься цей метод.
const user = {
name: "Alex",
showName() {
console.log("User name: ", this.name);
},
showThisObject() {
console.log(this);
},
};
user.showThisObject(); //{name: 'Alex', showName: ƒ, showThisObject: ƒ}
user.showName(); //User name: AlexРаніше ми визначили: контекст визначається місцем виклику функції, а не її створення.
Тому, якщо створити функцію у глобальній області - вона матиме глобальний контекст (window або undefined). А якщо цю функцію присвоїти як метод якомусь обʼєкту, то якщо викликати цей метод, як частину об'єкта - контекст посилатиметься на цей обʼєкт. Далі приклад:
this в callback-функціях
Якщо метод об'єкта передають як колбек-функцію, то контекст не зберігається. Колбек - це посилання на метод, яке присвоюється як значення параметра, що викликається без об'єкта.

this і стрілкові функції
Стрілкові функції не мають власного this. На відміну від класичних функцій, змінити значення this всередині стрілкової функції після її оголошення - неможливо.
Стрілкові функції ігнорують наявність суворого режиму. Якщо стрілка запам'ятала глобальний контекст, то this в ній буде містити посилання на window, незалежно від того, чи виконується скрипт в суворому режимі.
Обмежуючи стрілкові функції постійним контекстом, можна краще їх оптимізувати, на відміну від звичайних функцій, значення this яких можна змінити.
Last updated