drfisher
@drfisher
Пишу JS

Разница между call и apply

Допустим, у вас есть объект myObject и функция myFunction без аргументов. Вам требуется вызвать myFunction в контексте myObject. Какой из следующих вариантов вы будете использовать и, главное, почему именно его?

// Вариант 1:
myFunction.call(myObject);
// Вариант 2:
myFunction.apply(myObject);


В чем между этими вариантами разница в ситуации без аргументов? Есть ли у одного преимущество перед другим?
  • Вопрос задан
  • 7683 просмотра
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Разница в этих двух функциях лишь в том, что apply принимает массив аргументов, тогда как в call принимаются аргумменты списком. В каких-то бенчмарках наблюдал картину что call незначительно но быстрее apply. Но оба они намного медленнее прямого вызова функции.
Ответ написан
@zvorygin
Я бы выбрал вариант с call — если функция без параметров, т.к. по-хорошему в типизированном языке(коим JS, конечно не является), apply в данном случае надо было бы вызывать как myFunction.apply(myObject, []);
Ответ написан
spmbt
@spmbt
es5.javascript.ru/x15.3.html#x15.3.4.3 — ECMA про apply и call
Из этого следует (п.3), что myFunction.apply(myObject) ошибочно, писать второй аргумент надо всегда.
Ответ написан
Прошу прощения, не дочитал вопрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы