Page 142 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 142
update . c a l l ( b ruce, 1 9 4 9 , ' s inge ' ) ;
r
/ / bruce теперь { пате : "Bruce ", ЬirthYear: 1 9 49,
// occupa tioп : "siпge " }
r
update . c a l l (madeline, 1 9 4 2 , ' a ctress ' ) ;
п
// тadeliпe теперь { пате : "Madeli e " , ЬirthYea : 1 9 42,
r
// occupa tioп : "actress " }
Метод apply идентичен методу call, за исключением способа, которым он обраба
тывает аргументы функции. Методу call аргументы передаются непосредственно, точно
так же, как и обычной функции. Метод apply аргументы передаются в виде массива.
update . apply ( b ruce , ( 1 955 , " a ctor" ] ) ;
// bruce теперь { пате: "Bruce ", ЬirthYear: 1 9 55,
/ / оссира tioп : "a ctor" J
e
r
l
update . app y (mad l i ne , ( 1 9 1 8 , "write " ] ) ;
п
a
/ / тadeliпe теперь { пате : "M d eli e " , Ьirth Yea : 1918,
r
11 occupa tioп : "wri ter " }
Метод apply полезен, если у вас есть массив и вы хотите использовать его зна
чения как аргументы функции. Классический пример - поиск минимального или
максимального числа в массиве. Вспомогательным функциям Ма th . rnin и Ма th . шах
можно передать любое количество аргументов, а они возвращают минимальное или
максимальное значение, соответственно. Мы можем использовать метод apply, что
бы вызвать эти функции с существующим массивом.
const arr = ( 2 , 3 , - 5 , 1 5 , 7 ] ;
r
l
Math . m in . a pp y ( n ull , ar ) ; 11 -5
l
Math . m ax . a pp y ( n ull , arr) ; 11 1 5
м
Обратите внимание, что вместо значения this ы просто передаем null. Так про
исходит потому, что в функциях Math . rn in и Math . rn ax не используется переменная
this вообще; поэтому не имеет никакого значения, что мы передаем в качестве зна
чения для this.
Оператор расширения ( . . ) ЕSб позволяет достичь того же результата, что и ме
.
тод apply. В экземпляре нашего метода update, в котором значение this действи
тельно важно, мы все еще должны использовать метод call, но для функций Math .
rnin и Math . rn ax, для которых оно не имеет значения, мы можем использовать опера
тор расширения, чтобы вызвать эти функции непосредственно.
const newBruce = [ 9 4 0 , "martial artist " ] ;
1
c
update . call ( b ruce, . . . newBru e ) ; / / эквивалент apply (bruce, пewBruce)
.
Math . m in ( . . arr ) ; // -5
Math . m ax ( . . arr ) ; // 1 5
.
Есть еще одна функция, Ьind, которая позволяет определить значение для пе
ременной thi s . Функция Ьind позволяет перманентно ассоциировать значение
для this с функцией. Предположим, что мы распространяем свой метод update
1 4 2 Глава 6. Функции

