Аналог оператора spread

156
20 декабря 2018, 15:30

Читаю про ES-2015 на http://learn.javascript.ru, в частности использование spread. Приведен такой пример:

'use strict';
let numbers = [2, 3, 15];
let max = Math.max(...numbers);
alert( max ); // 15

а ниже указано, что

Math.max(...numbers);
Math.max.apply(Math, numbers);

делают одно и то же.

Сам пример мне понятен, но что за конструкция приведена здесь:

Math.max.apply(Math, numbers);

???

Что за метод apply?

Answer 1

apply позволяет вызывать функцию/метод в контексте другого объекта

const obj = {
  name: 'obj',
  method: function () {
    alert(this.name);
  }
}
obj.method(); // выведет obj
obj.method.apply({name: 'obj2'}); // выведет obj2

Подробнее

P.S.
apply не совсем аналог spread-оператору. Просто Math.max принимает список параметров, в который разворачивается массив spread-оператором.

let numbers = [2, 3, 15];
let max = Math.max(...numbers);
// то же самое что и
Math.max(2, 3, 15);

apply же вторым параметром принимает массив, которые будет передан как аргументы в функцию

const fn = (a, b) => a + b
fn.apply(null, [1, 2]); // null потому что нам не нужен тут контекст
READ ALSO
Какой алгоритм перемещения? JS

Какой алгоритм перемещения? JS

Вам необходимо создать приложение для автоматизации работы погрузочных кранов, позволяющих перемещать плиты между грузовыми автомобилями...

176
Отправить AJAX запрос на другой домен

Отправить AJAX запрос на другой домен

Как сделать чтобы работало?

158
Максимальное количество меток на карте Google Maps на мобильных устройствах

Максимальное количество меток на карте Google Maps на мобильных устройствах

На сайте есть гугл картаНа неё JS-ом выводятся пользовательские метки (google

185
Отловить изменение содержимого div

Отловить изменение содержимого div

У меня есть div, содержимое которого может меняться различными способами: например, весь его контент может быть изменён через innerHTML, или могут...

198