Назад к вопросам
Junior
81
questionbank

Что такое this в JavaScript?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

this в JavaScript — это ключевое слово, указывающее на контекст выполнения функции. Его значение определяется способом вызова функции.

Обычно this указывает на глобальный объект (в браузере window) в случае обычного вызова функции, если не в строгом режиме.

В строгом режиме ('use strict') в том же сценарии this будет undefined.

При вызове метода объекта this ссылается на сам объект.

const obj = {
  method: function() {
    console.log(this); // obj
  }
};
obj.method();

При вызове конструктора (new с функцией), this указывает на новый созданный экземпляр объекта.

function Constructor() {
  console.log(this); // экземпляр Constructor
}
const instance = new Constructor();

При использовании методов call, apply, bind, this явно устанавливается первым аргументом.

function greet() {
  console.log(`Привет, ${this.name}!`);
}

const person = { name: 'Алиса' };

greet.call(person); // Привет, Алиса!
greet.apply(person); // Привет, Алиса!

const boundGreet = greet.bind(person);
boundGreet(); // Привет, Алиса!

В стрелочных функциях this не имеет собственного контекста. Оно лексически наследуется из той области видимости, где стрелочная функция была определена.

const obj2 = {
  name: 'Боб',
  greet: function() {
    const arrowGreet = () => {
      console.log(`Привет от ${this.name}!`); // this ссылается на obj2
    };
    arrowGreet();
  }
};
obj2.greet(); // Привет от Боб!

const obj3 = {
  name: 'Чарли',
  greet: () => {
    console.log(`Привет от ${this.name}!`); // this ссылается на window (или undefined в строгом режиме), не на obj3
  }
};
obj3.greet(); // Привет от undefined! (или ошибка)

Контекст this может быть неочевиден, особенно при передаче колбэков или асинхронных операциях. Понимание правил определения this критично для корректной работы JavaScript.