Мы знаем, что функции — это особый вид объектов. Функции также получают пару специальных методов, которые они наследуют от объекта-конструктора функции. мы поговорим о мощных методах call, apply и bind, которые позволяют нам вызывать функцию и устанавливать этупеременную вручную. давайте создадим объект:
let john = { name:"John", age: 26, callFun:function(){ console.log(this.age); } }
при вызове john.callFun() вывод будет 26.
john.callFun(); //Result is 26
Теперь давайте добавим сюда еще один объект для кого-то по имени Ким.
let kim = { name:”Kim”, age: 30 }
Теперь предположим, что мы хотим использовать метод callFun для объекта Kim, у которого нет этого метода callFun, верно? Для этого мы можем использовать метод call. Первым аргументом метода вызова всегда является установка этойпеременной.
Поэтому, если мы установим эту >переменная для kim, тогда этапеременная больше не будет john.
john.callFun.call(kim); //Result is 30
Метод call позволяет нам установить эту переменную здесь, в первом аргументе, и мы устанавливаем для нее значение «kim», потому что мы хотели использовать метод callFun Джона. Итак, это метод вызова. Существует очень похожий метод, который называется методом применения, и единственное отличие состоит в том, что он принимает аргументы в виде массива, то есть всего два аргумента, первый этот переменная, а затем массив, куда попадают все остальные аргументы.
john.callFun.apply(kim,[args1,args2]); //Example represtation
Привязка также очень похожа на метод вызова, поэтому она также позволяет нам явно установить эту переменную. Однако разница здесь в том, что bind не вызывает функцию сразу, а вместо этого генерирует копию функции
, чтобы мы могли ее где-нибудь сохранить. И это действительно может быть чрезвычайно полезно для создания функций с предустановленными аргументами.
let kimBindCall = john.callFun.bind(kim); kimBindCall();
Приятного чтения!