> Как вызвать функцию, чтобы this указывал на нужный объект, а не на window в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Домклик

Стек: JavaScript

> Пример ответа

В JavaScript this определяется тем, как вызывается функция. Чтобы явно задать контекст, используются методы call, apply и bind.

  1. call - вызывает функцию с указанным this и аргументами через запятую:
JAVASCRIPT
function greet(greeting) {
console.log(`${greeting}, ${this.name}`);
}
const user = { name: 'Анна' };
greet.call(user, 'Привет'); // "Привет, Анна"
  1. apply - аналогичен call, но аргументы передаются массивом:
JAVASCRIPT
greet.apply(user, ['Здравствуйте']); // "Здравствуйте, Анна"
  1. bind - не вызывает функцию сразу, а возвращает новую функцию с навсегда привязанным this:
JAVASCRIPT
const boundGreet = greet.bind(user);
boundGreet('Хай'); // "Хай, Анна"

Также в стрелочных функциях this не привязывается - он берется из внешнего лексического окружения. Если нужно сохранить контекст в обработчике событий или таймере, используйте bind или стрелочную функцию:

JAVASCRIPT
button.addEventListener('click', () => {
console.log(this); // this берется из родительской области видимости
});

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью