Различие методов call / apply в javascript? [дубликат]

226
03 января 2018, 20:59

На данный вопрос уже ответили:

  • bind, call, apply в чём разница? 2 ответа

Вызов func.call(context, a,b...) – то же, что обычный вызов func(a, b...), но с явно указанным this(=context); Метод apply работает так же как и метод call, с той разницей, что в него мы передаем не контекст + строковые аргументы, а контекст + массив

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

var playList = {
  title: "favorite songs"   
}
var songs = [];
function makePlayList() {
  console.log(this.title+":");
  for (var i = 0; i < songs.length; i++) {
    console.log((i+1)+": "+songs[i]);
  }
}
songs.push("Muse - Resistance");
songs.push("Tame Impala - Let It Happen");
songs.push("MGMT – Alien Days");
makePlayList.apply(playList,songs);

Но затем я попробовал строку

makePlayList.apply(playList,songs);

И понял, что я не понял в чем же суть метода apply, помогите пожалуйста разъясните ситуацию на моем примере

Answer 1

Приветствую

someFunc.apply(ctx, [arg1, arg2, arg3]);
someFunc.call(ctx, arg1, arg2, arg3);

Вот и всё разница :)

В вашем примере ни call ни apply не нужны, так как ни аргументов у функции нет, ни контекст не используется. С приходом es6, манипуляции с this по большей части закончены.

В es6 массив в качестве аргументов можно передать через деструкцию:

const args = [arg1, arg2, arg3];
someFunc(...args);
// = someFunc(arg1, arg2, arg3)

Также внутри функции, у которой есть контекст, всегда можно выяснить аргументы запросив arguments (даже если у функции явно аргументы не указаны)

READ ALSO
append отрабатывает дважды при ready и resize

append отрабатывает дважды при ready и resize

Имеется функция сappend внутри

258
Как работает WebPack

Как работает WebPack

У меня есть проект и в нём куча подключённых библиотек, например lodashИз этой библиотеки я использую пока только одну функцию _

240
Положение пользователя в дереве Treant.Js

Положение пользователя в дереве Treant.Js

Здравствуйте, кто нибудь работал с плагином TreantJS? Как в настройках плагина указать местоположения пользователя в дереве?

223
Цвет фона при скроле

Цвет фона при скроле

Доброго времени суток! Есть один вопрос к знатакамСделал я фиксированое меню с якорями, но есть проблема: Когда я скролю вниз, у меня к прозрачному...

225