На данный вопрос уже ответили:
Вызов 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, помогите пожалуйста разъясните ситуацию на моем примере
Приветствую
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 (даже если у функции явно аргументы не указаны)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости