Middle
Разкажи за това в различни контексти: в методите на обекта, в стрелковите функции и в обикновените функции.
sobes.tech AI
Отговор от AI
В JavaScript стойността на this зависи от контекста на извикване на функцията:
- В методите на обект
thisсе отнася до обекта, към който принадлежи методът:
const obj = {
name: 'Alice',
greet() {
console.log(this.name);
}
};
obj.greet(); // Alice
- В обикновена функция (не в метод)
thisзависи от режима и начина на извикване:- В строг режим (
'use strict') —thisще бъдеundefined. - В нестрог режим — ще бъде глобалният обект (
windowв браузъра).
- В строг режим (
function foo() {
console.log(this);
}
foo(); // window или undefined в строг режим
- В стрелкови функции
thisсе наследява лексикално от външния контекст, т.е. от областта, в която е обявена функцията, а не от мястото, където е извикана:
const obj = {
name: 'Bob',
arrowFunc: () => {
console.log(this.name);
},
regularFunc() {
const arrow = () => {
console.log(this.name);
};
arrow();
}
};
obj.arrowFunc(); // undefined или името от външния контекст
obj.regularFunc(); // Bob
Затова стрелковите функции са полезни за запазване на контекста this от външната функция, докато обикновените функции и методи имат собствена стойност this в зависимост от начина на извикване.