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

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

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

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

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

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

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

apply — это встроенный метод, который позволяет вызвать функцию с определённым контекстом (this) и массивом аргументов. Это один из трёх способов управления контекстом выполнения функции, наряду с call и bind.

Основной синтаксис

function.apply(thisArg, [arg1, arg2, arg3])

где:

  • thisArg — значение, которое будет использовано как this при вызове функции
  • аргументы — массив или array-like объект параметров функции

Практические примеры

Пример 1: Применение функции с другим контекстом

const person = {
  name: 'Иван',
  greet: function(greeting, punctuation) {
    return greeting + ', ' + this.name + punctuation;
  }
};

const anotherPerson = { name: 'Мария' };

// Используем apply для вызова greet с контекстом anotherPerson
console.log(person.greet.apply(anotherPerson, ['Привет', '!']));
// Результат: "Привет, Мария!"

Пример 2: Поиск максимального значения в массиве

const numbers = [5, 23, 12, 3, 99, 7];
const max = Math.max.apply(null, numbers);
console.log(max); // 99

Пример 3: Копирование методов между объектами

const logger = {
  prefix: '[LOG]',
  log: function(message) {
    console.log(this.prefix + ' ' + message);
  }
};

const errorLogger = { prefix: '[ERROR]' };

// Вызываем метод logger с контекстом errorLogger
logger.log.apply(errorLogger, ['Ошибка при загрузке!']);
// Результат: "[ERROR] Ошибка при загрузке!"

Отличие от call

apply и call делают почти одно и то же, но различаются в передаче аргументов:

// call — аргументы передаются по одному
func.call(thisArg, arg1, arg2, arg3);

// apply — аргументы передаются массивом
func.apply(thisArg, [arg1, arg2, arg3]);

Современный способ: spread operator

В современном JavaScript часто используют spread оператор вместо apply:

// Старый способ
Math.max.apply(null, [5, 23, 12]);

// Новый способ (ES6+)
Math.max(...[5, 23, 12]);

Когда использовать apply?

  • При работе с legacy кодом
  • Когда нужно передать аргументы из массива в функцию
  • Для реализации декораторов и middleware паттернов
  • Когда нужно заимствовать методы из других объектов

Понимание apply критично для работы с контекстом, замыканиями и функциональным программированием в JavaScript.