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

Для чего используется метод apply?

2.0 Middle🔥 171 комментариев
#Node.js и JavaScript

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

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

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

Метод apply в JavaScript

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

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

apply используется для:

  1. Переиспользования функций с разным контекстом — вызвать функцию, определённую в одном объекте, в контексте другого объекта
  2. Передачи аргументов массивом — когда аргументы уже собраны в массив
  3. Работы с переменным числом аргументов — особенно при работе с arguments или rest parameters

Синтаксис

function.apply(thisArg, [argsArray])
  • thisArg — объект, который будет служить значением this внутри функции
  • argsArray — массив аргументов, которые будут переданы функции

Примеры использования

// Пример 1: Заимствование метода
const person1 = {
  name: 'Иван',
  greet(greeting) {
    console.log(`${greeting}, ${this.name}!`);
  }
};

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

// Используем метод person1 в контексте person2
person1.greet.apply(person2, ['Привет']); // 'Привет, Мария!'
// Пример 2: Поиск максимума массива
const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers); // 7

// Или с ES6 spread operator:
const max2 = Math.max(...numbers); // 7
// Пример 3: Работа с вложенными функциями
function sum(a, b, c) {
  return a + b + c + this.bonus;
}

const context = { bonus: 10 };
const args = [1, 2, 3];

const result = sum.apply(context, args); // 16

Практическое применение в Node.js

// Логирование с контекстом
function logError(timestamp, level, message) {
  console.error(`[${timestamp}] ${level}: ${message} (сервис: ${this.serviceName})`);
}

const logger = { serviceName: 'AuthService' };
logError.apply(logger, [new Date().toISOString(), 'ERROR', 'Ошибка аутентификации']);

apply vs call vs bind

  • apply — вызывает функцию сразу, аргументы передаются массивом
  • call — вызывает функцию сразу, аргументы передаются отдельно
  • bind — возвращает новую функцию с привязанным контекстом, не вызывает её
// apply
func.apply(obj, [arg1, arg2]);

// call
func.call(obj, arg1, arg2);

// bind
const boundFunc = func.bind(obj);
boundFunc(arg1, arg2);

Заключение

Метод apply незаменим при работе с функциональным программированием, создании утилит и реализации паттернов вроде декораторов и middleware. Хотя современный ES6 spread operator часто заменяет apply, понимание этого метода критически важно для опытного разработчика.

Для чего используется метод apply? | PrepBro