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 | Firefox | Opera | Safari | IExplorer | 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 ); // возвращаемое значение 22JavaScript Function