В JavaScript методы call(), apply() и bind() очень полезны для выполнения функции в заданном контексте и аргументах.

Методы call() и apply() почти аналогичны, эти методы немедленно выполняют функцию с заданным контекстом и аргументами, за исключением одного отличия. Метод call() будет принимать аргументы как разделенные запятыми(,), а метод apply() будет принимать их как массив.

Метод bind() не будет выполнять функцию немедленно, вместо этого он привяжет функцию для заданного контекста, позже мы сможем вызвать ее с необходимыми аргументами.

Давайте рассмотрим пример поиска направлений на карте Google для трех мест:

Соответствующие объекты JavaScript для этих трех мест:

var trip1 = {
пункт назначения: «Ченнаи»,
id: 1
};

var trip2 = {
пункт назначения: «Ути»,
id: 2
};

var trip3 = {
пункт назначения: «Танджавур»,
id: 3
};

Функция карты для направления

Функция «launchMap» просто откроет карту Google с указанием источника, пункта назначения и режима движения.

function launchMap(source, travelmode) {
window.open('https://www.google.com/maps/dir/?api=1&origin=' + source + '&destination=' + this.destination + '&travelmode=' + режим передвижения);
}

В этом случае я знаю, что источник — «Коимбатур», пункт назначения — «Ченнаи», а способ передвижения — «вождение».

launchMap.call(trip1,'Coimbatore','вождение');

Приведенный выше вызов откроет карту для следующего URL-адреса:

https://www.google.com/maps/dir/?api=1&origin=Coimbatore&destination=Chennai&travelmode=driving

Это точно так же, как и метод call, но с передачей аргументов в виде массива, воспользуемся для этого данными trip2.

launchMap.call(trip1,'Coimbatore','вождение');

Приведенный выше метод apply() откроет следующий URL-адрес:

https://www.google.com/maps/dir/?api=1&origin=Coimbatore&destination=Ooty&travelmode=driving

Что ж, для первых двух вариантов мы знаем источник как «Coimbatore», давайте представим сценарий, где нам нужно найти направления для места trip3 (Madurai) из текущего геолокации пользователя, которые нам нужно собрать в будущем. . В этом случае мы можем просто использовать метод bind() для привязки функции «launchMap», и мы можем выполнить ее позже, как только будет доступно географическое местоположение пользователя.

launchMap.call(trip1,'Coimbatore','вождение');

Давайте используем объект навигатора JavaScript, чтобы получить текущую геопозицию пользователя, как только она будет доступна, мы можем вызвать функцию «callLater» с координатами.

var userLocation;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(pos =› {
if (pos && pos.coords) {
var userLocation = pos. coords.latitude + ',' + pos.coords.longitude;
callLater(userLocation, 'вождение');
}
});
}

Приведенный выше код запустит карту направлений между географическим местоположением текущего пользователя и «Мадурай».

Полный исходный код:

Первоначально опубликовано на https://www.thamizhchelvan.com 19 декабря 2017 г.