call(), bind() и apply() в javascript

Если на собеседовании по js спросить о любом из этих ключевых слов, то все они будут иметь одну общую черту — это методы, связанные с прототипом функции в javascript.

Каждая функция имеет свой контекст выполнения, как уже говорилось ранее. У каждой функции также есть свое ключевое слово this, как было введено в ES6. Мы будем работать с ключевым словом this, используя упомянутые методы.

Содержание
  1. call()
  2. apply()
  3. bind()

call()

Функция call позволяет нам передавать аргументы функции по отдельности. Здесь мы передаем значение this для функции.

Я считаю, что на примере всегда понятнее:

function chime() {
  const notif = [this.name, 'has followed you!', this.id].join(' ');
  console.log(notif);
}

const obj = {
  name: 'Joe',
  id: '@Joeisheretocomment',
};

chime.call(obj);  
Войти в полноэкранный режим Выйти из полноэкранного режима


(один из тех дней, когда у вас нет компьютера, и он по умолчанию работает в легком режиме)

Это один из случаев использования call(). Мы также используем функцию call для конструкторов и объектов (см. ссылки ниже).

apply()

Она похожа на call(), разница лишь в том, что при использовании метода apply() мы передаем аргументы в виде массива.

Очень интересный случай использования apply(), который я обнаружил при использовании встроенных библиотек.

array=[21,22,13,45,60,988]
console.log(Math.max(array))
Вход в полноэкранный режим Выход из полноэкранного режима


Интересно, что с помощью метода apply мы можем заставить функцию Math.max принимать каждый элемент массива как отдельный аргумент.

array=[21,22,13,45,60,988]
console.log(Math.max.apply(null,array))
Вход в полноэкранный режим Выйти из полноэкранного режима

Первый параметр не используется Math.max, так как ему не нужен контекст.

bind()

Этот метод прототипирования создает еще одну копию функции и полезен для удержания этой ссылки.

Пример

let user = {
  follower: "JoeAgain"
};

function func() {
  alert(this.follower);
}

let funcUser = func.bind(user);
funcUser();
Вход в полноэкранный режим Выход из полноэкранного режима

В этом случае мы связываем копию функции с конкретным **this=user**.

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

Просмотрите примеры и случаи использования каждого из них, они так широко используются, просто не запутайтесь 😀
🌟 Вызвать и применить метод
Ключевое слово 🌟this и прототипирование функций

Оцените статью
devanswers.ru
Добавить комментарий