
Привет, разработчики!
Надеюсь, у вас все хорошо. Сегодня давайте поговорим о заимствовании функций в JS. Вы когда-нибудь оказывались в ситуации, когда вы работаете с объектами одинаковой структуры и пишете в каждом объекте одну и ту же функцию? Что ж, это что-то плохое, и этого не следует делать, не так ли? В этом случае вам необходимо увидеть понятие «заимствование функций». Давайте углубимся в него.
Заимствование функций
Это означает использование метода одного объекта и применение его к другому объекту.
Предположим, у вас есть два объекта: «objectA» и «objectB», и оба объекта имеют метод с одинаковым именем, скажем, «printName». . В этом случае мы можем 'заимствовать' метод «printName» у одного объекта и использовать его с другим объектом.
Разберемся на примере:→
let Person1=
{
name:"Daniel",
printName:function()
{
//this refers to Person object.
console.log(this.name);
}
}
let Person2=
{
name:"Michael"
}
//As we have passed Person2 so this refer to Person2 object
Person1.printName.call(Person2); //Prints Michael
Поскольку мы используем функцию Person1, лучше ее выделить. Мы можем написать это так →
let Person1=
{
name:"Daniel",
}
let printName=function()
{
console.log(this.name);
}
printName.call(Person1); //Prints "Daniel"
let Person2=
{
name:"Michael"
}
printName.call(Person2); //Prints "Michael"
Для этого мы можем использовать методы «bind()», «apply()», давайте посмотрим на примере.
let Person1=
{
name:"Daniel",
}
let printName=function(lastname)
{
console.log(this.name+" "+lastname);
}
let Person2=
{
name:"Michael"
}
//Using call method
printName.call(Person2,"Maxi->Call Method()"); //Prints "Michael Maxi->call method()"
//Using apply method.
/*
Only difference is that in apply method while passing the extra argument
we have to pass it in the array. But in call() we can pass it in a traditional way.
*/
printName.apply(Person2,["Maxi->apply method()"]); //Prints "Michael Maxi->apply method()"
//bind method
/*
Here passing the argument is same as call method.
But bind() method returns a function, assign it to var,
and then call it.
*/
let print=printName.bind(Person2,"Maxi->bind method()");
print(); //Prints "Michael Maxi->bind method()"
Итак, это «заимствование функций», и вот так мы можем его реализовать.
Надеюсь, вам понравилась эта история/тема. Если у вас есть какие-либо вопросы, дайте мне знать в разделе комментариев/ответов.
Следуйте за мной в LinkedIn.
На простом английском языке
Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти:
- Обязательно аплодируйте и следуйте за автором! 👏
- Еще больше контента вы можете найти на PlainEnglish.io 🚀
- Подпишитесь на нашу бесплатную еженедельную рассылку. 🗞️
- Следуйте за нами в Twitter(X), LinkedIn, YouTube и Discord.