Если на собеседовании по js спросить о любом из этих ключевых слов, то все они будут иметь одну общую черту — это методы, связанные с прототипом функции в javascript.
Каждая функция имеет свой контекст выполнения, как уже говорилось ранее. У каждой функции также есть свое ключевое слово this
, как было введено в ES6. Мы будем работать с ключевым словом this
, используя упомянутые методы.
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 и прототипирование функций