JavaScript метод apply()

JavaScript Function

Определение и применение

JavaScript метод apply() позволяет вызывать (выполнять) функцию как метод объекта, устанавливая ее контекст исполнения (this) в указанное значение, передавая при этом необходимые аргументы в виде массива (объекта Array), либо массивоподобного объекта.

Чтобы вызвать функцию (без аргументов) как метод объекта достаточно использовать метод call(), или apply() следующим образом:

func.call( obj );
func.apply( obj );

Все аргументы метода call(), следующие за первым аргументом, который определяет контекст вызова, передаются вызываемой функции. Метод apply() действует подобно методу call(), за исключением того, что аргументы для функции передаются в виде массива, или объекта, подобного массиву, а не перечисляются через запятую:

func.call( obj, 1, 2, 3 );
func.apply( obj, [1, 2, 3] );

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
call()ДаДаДаДаДаДа

JavaScript синтаксис:

// без передачи дополнительных аргументов 
function.apply( thisArg ); 

// с указанием дополнительных аргументов передаваемых функции 
function.apply( thisArg, [arg1, ...argX] ); 

Версия JavaScript

1.3 (ECMAScript 3rd Edition)

Значения параметров

ПараметрОписание
thisArgЗначение, передаваемое в качестве параметра this целевой функции при вызове связанной функции. Если этот аргумент содержит значение null, то используется глобальный объект. Необязательный параметр.
[arg1, ...argX]Массив, или массивоподобный объект, определяющий аргументы, с которыми функция должна быть вызвана, или null, или undefined, если функция вызывается без аргументов. Необязательный параметр.

Исключения

Тип исключенияОписание
TypeErrorВозникает в том случае, если метод вызывается для объекта, не являющегося функцией.

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

let obj = {  // инициализируем переменную, содержащую объект
    a: 100,
    b: 200
};

// функция возвращает сумму трех значений
let func = function( c, d ) { return this.a + this.b + c + d };

// вызываем функцию как метод объекта
func.apply( obj, [300, 400] ); // возвращаемое значение 1000

В следующем примере мы рассмотрим как с помощью методов push() и apply() добавить один массив к другому:

// инициализируем переменные, содержащие массив
let arr1 = ["a", "b"];
let arr2 = [1, 2, 3];

// добавляем один массив к другому
arr1.push.apply( arr1, arr2 );
console.log( arr1 ); // возвращаемое значение ["a", "b", 1, 2, 3]

В следующем примере мы рассмотрим как с помощью методов объекта Math и метода apply() вычислить максимальное и минимальное значение в массиве:

// инициализируем переменную, содержащую массив
let arr = [-10, 22, 5, -2];

// находим минимальное число в массиве
Math.min.apply( null, arr ); // возвращаемое значение -10

// находим максимальное число в массиве
Math.max.apply( null, arr ); // возвращаемое значение 22
JavaScript Function