Если кратко, то оба этих метода используются для вызова функции в контексте другого объекта. Однако основное различие между ними заключается в том, как мы передаем аргументы в функцию.
Прежде чем рассмотреть, как отличается call
от apply
, давайте вспомним, что в JavaScript функции являются объектами и, как и все объекты, они имеют свойства и методы. Call
и apply
— это такие методы, которые доступны для всех функций и позволяют нам вызывать функцию, явно задавая контекст (this
) для этого вызова.
Предположим, у нас есть функция, которая выводит имя и возраст человека:
function introduction(name, age){ console.log(`My name is ${name} and I am ${age} years old.`); }
Эта функция может быть вызвана с помощью call
или apply
в контексте другого объекта. Допустим, у нас есть объект person
:
let person = { name: 'John Doe', age: 30 };
Теперь мы можем использовать call
или apply
чтобы вызвать функцию introduction
в контексте объекта person
:
introduction.call(person, person.name, person.age); introduction.apply(person, [person.name, person.age]);
В обоих случаях мы получим в консоли: «My name is John Doe and I am 30 years old».
Метод call()
принимает аргументы через запятую, а метод apply()
принимает аргументы в виде массива. Вот в чем их основное отличие.
Что касается производительности, то на практике разницы в скорости работы этих двух методов почти нет. Выбор между call
и apply
в большинстве случаев определяется тем, как удобнее передавать аргументы в функцию: как отдельные значения или как массив.
Например, использование apply
может быть полезно, когда количество параметров неизвестно заранее и они хранятся в массиве. И наоборот, call
удобнее использовать, когда параметры передаются напрямую.
Добавить комментарий