Объекты и контекст `this`
Почему this зависит от того, как вызвали функцию.
also in web development basics
On this page
Метод – функция, записанная в свойстве объекта. Внутри метода this обычно указывает на объект, через который этот метод вызвали.
const car = {
brand: "Volvo",
model: "V60",
year: 2022,
getDescription() {
return `${this.brand} ${this.model}, ${this.year} год`;
},
};
console.log(car.getDescription());Здесь метод вызван как car.getDescription(), поэтому this внутри него - объект car. Через this метод читает свойства именно этой машины.
Почему говорят «контекст вызова»
У обычной функции значение this зависит от способа вызова, а не только от места, где написан её код. Один и тот же метод можно вызвать от имени другого объекта:
const anotherCar = {
brand: "Audi",
model: "A4",
year: 2024,
getDescription: car.getDescription,
};
console.log(anotherCar.getDescription());
// Audi A4, 2024 годХотя функция метода была записана внутри объекта car, в новом вызове перед точкой стоит anotherCar. Поэтому this указывает на anotherCar, и результат содержит марку и модель Audi. Запоминайте правило так: для обычного метода важен объект слева от точки в момент вызова.
Стрелочная функция не создаёт собственный this, а берёт его из окружающего кода. Поэтому для метода объекта обычно используйте обычную запись getDescription() { ... }. Подробности: руководство MDN о this.