Привет народ🌹! В этой статье будет рассмотрено использование this в call(), apply() и bind().

call(), apply() и bind() используются для определения контекста this внутри функции метода.

//Line 7
console.log(‘Hello’ + “ “ + this.type + “ “ + x); //Hello Person Tony Strak

В приведенном выше примере 'this' внутри функции приветствия относится к объекту окна, поэтому this.typeвозвращает 'Person'. Но что, если мы хотим, чтобы this ссылался на объект животное? ?

call() и apply() на помощь😁

console.log(‘Hello’ + “ “ + this.type + “ “ + x + ‘’ + y);// Hello Human Tony Strak Iron Man

Первый параметр в методе call() — это объект, на который вы хотите ссылаться this, для которого вызывается функция. В данном случае это объект «животное» выше.

Посмотрим, как применить()

console.log(‘Hello’ + “ “ + this.type + “ “ + x + ‘ ’ + y);// Hello Human Tony Strak Iron Man

Первый параметр в методе apply() — это объект, на который вы хотите ссылаться, для которого вызывается функция.

Единственная разница между apply() и методом call() заключается в том, что второй параметр метода apply() принимает аргументы в виде массива.

Давайте возьмем еще один пример call()-

dog1.fullName.call(dog2); // GoldenR 6
console.log(dog1.name); //null
console.log(dog2.name); //GoldenR 6

Мы также можем видеть, что когда мы регистрируем dog1.name и dog2.name , мы получаем результат для последнего, а не для первого, что означает, что функция dog1.fullName.call(dog2) была действительно вызывается dog2 , а не dog1.

привязать()🎪

console.log(ownerName + “, this is your dog: “ + this.breed + this.name); //Harry, this is your dog: LabraShery

Ждать! Но что, если мы хотим позаимствовать метод??

var myDog = dog.details;
myDog(); //undefined, this is your dog: undefined

Это не работает, потому что this теперь относится к глобальному контексту и нет переменной с именемпородаи имя в глобальном контексте. На помощь приходит bind()!!

//Line 10
myDog(); //Harry, this is your dog: LabraShery

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

.call()
FunctionName.call(value of this, arg1, arg2, …)//Will execute Function
.apply()
FunctionName.apply(value of this, [arg1, arg2, ..])//Will execute Function
.bind()
newFunction = FunctionName.bind(value of this, arg1, arg2 …) //Will return a new function

Спасибо, что прочитали эту статью 🙏🌺