Привет, разработчики!

Надеюсь, у вас все хорошо. Сегодня давайте поговорим о заимствовании функций в 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.

На простом английском языке

Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти: