DEV Community

Vipin Chandra
Vipin Chandra

Posted on

Js Interview : Bind , Call , Apply ?

What is call and apply ? and why we need them ?

I know this is the first question which comes to our mind🤯

Lets understand this with an example

let personOne = { firstName: "Vipin", lastName: "Chandra" sayHi: function () { console.log(" Hey myself " + this.firstName + " " + this.lastName); } }; let personTwo = { firstName: "Kunal", lastName: "verma", sayHi: function () { console.log(" Hey myself " + this.firstName + " " + this.lastName); } }; personOne.sayHi() // Hey myself Vipin Chandra personTwo.sayHi() // Hey myself Kunal verma 
Enter fullscreen mode Exit fullscreen mode

We have sayHi() method in two person object separately ,Now imagine how many times we have to write the same function again and again for every new person object.

Waste of time right ?

call( ) is a built-in method to a function which helps us to call a function with given context (this).

what will happen if we take sayHi( ) out of person object ?
It will not work obviously.

let personOne = { firstName: "Vipin", lastName: "Chandra" }; let sayHi = function() { console.log(" Hey myself " + this.firstName + " " + this.lastName); } sayHi(); // error // this is undefined or refer to window object here. 
Enter fullscreen mode Exit fullscreen mode

By using call( ) we can add a context(this) to the function sayHi( )

Syntax of call( )

method.call(refrence*,arg,arg)

sayHi.call(personOne); //Hey myself Vipin Chandra  // you can call it multiple time by just changing the refrence sayHi.call(personTwo) //Hey myself Kunal verma 
Enter fullscreen mode Exit fullscreen mode

And this worked.

apply( ) is just the same as call( ) the only little difference between them is the way the argument get passed.

Syntax of apply( )

method.apply(refrence*,[arg1,arg2])

 let sayHi = function(state , city) { console.log(" Hey myself " + this.firstName + " " this.lastName +" from "+state + " , " + city); } sayHi.call(personOne,"uttarakhand","almora") //Hey myself Vipin Chandra from uttarakhand , almora  sayHi.apply(personOne,["uttarakhand","almora"]) // The array get destructured state = uttarakhand ,city = almora //Hey myself Vipin Chandra from uttarakhand , almora  
Enter fullscreen mode Exit fullscreen mode

Bind( ) work the same as call and apply but it does not call the function immediately instead it returns a function with fixed context(this) and fixed arguments if provided

let introOne = sayHi.bind(personOne,"uttarakhand","almora"); // call it later on introOne( ) //Hey myself Vipin Chandra from uttarakhand , almora  // it will get executed in context of personOne object 
Enter fullscreen mode Exit fullscreen mode

Function cannot be Rebound

let introOne = sayHi.bind(personOne,"uttarakhand","almora").bind(personTwo,"punjab","jalandhar"); introOne( ); // //Hey myself Vipin Chandra from uttarakhand , almora  
Enter fullscreen mode Exit fullscreen mode

Thanks for your Read.
You can also check out my other blogs on javascript.

Top comments (0)