← Назад к вопросам

Зачем ключевое слово this?

1.0 Junior🔥 161 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ключевое слово this: назначение и важность

Ключевое слово this — это одна из самых важных (и часто непонятных) концепций JavaScript. Оно представляет контекст выполнения функции и указывает на объект, к которому принадлежит текущий код.

Основное назначение this

this позволяет функции узнать, какой объект её вызвал, и работать с его свойствами и методами. Это основа объектно-ориентированного программирования в JavaScript.

const user = {
  name: 'Иван',
  age: 30,
  greet() {
    console.log(`Привет, я ${this.name} и мне ${this.age} лет`);
  }
};

user.greet(); // Привет, я Иван и мне 30 лет

Здесь this внутри метода greet() указывает на объект user.

Главные сценарии использования this

1. Методы объектов this позволяет методам работать с данными своего объекта:

const car = {
  brand: 'Toyota',
  speed: 0,
  accelerate() {
    this.speed += 20;
    console.log(`${this.brand} едет со скоростью ${this.speed} км/ч`);
  }
};

car.accelerate(); // Toyota едет со скоростью 20 км/ч

2. Конструкторы и классы При создании экземпляра класса this ссылается на новый объект:

class Person {
  constructor(name) {
    this.name = name;
  }

  introduce() {
    console.log(`Меня зовут ${this.name}`);
  }
}

const person = new Person('Мария');
person.introduce(); // Меня зовут Мария

3. Обработчики событий В браузере this указывает на элемент, который вызвал событие:

const button = document.querySelector('button');
button.addEventListener('click', function() {
  console.log(this); // указывает на button элемент
  this.style.background = 'red';
});

4. Вызов функций в разных контекстах Методы call(), apply() и bind() позволяют явно установить значение this:

function greet(greeting) {
  console.log(`${greeting}, ${this.name}`);
}

const person = { name: 'Артём' };
greet.call(person, 'Привет'); // Привет, Артём
greet.apply(person, ['Добрый день']); // Добрый день, Артём

const boundGreet = greet.bind(person);
boundGreet('Hi'); // Hi, Артём

Контекст this в разных ситуациях

  • Функция как метод: this = объект
  • Обычная функция: this = undefined (strict mode) или window (non-strict)
  • Стрелочная функция: this из внешней области видимости
  • Конструктор (new): this = новый объект
  • Обработчик события: this = элемент события

Частые ошибки

// Потеря контекста
const user = { name: 'Петр', greet() { console.log(this.name); } };
setTimeout(user.greet, 1000); // undefined — потеряли контекст

// Решение
setTimeout(() => user.greet(), 1000); // Петр — стрелочная функция сохраняет контекст
setTimeout(user.greet.bind(user), 1000); // Петр — явно привязали контекст

Значение для разработки

this необходимо для:

  • Создания переиспользуемых методов
  • Работы с DOM элементами
  • Построения иерархий объектов
  • Правильной работы обработчиков событий

Понимание this — обязательно для написания чистого и предсказуемого JavaScript кода.

Зачем ключевое слово this? | PrepBro