[Javascript] bind()
What does bind()
do?
- It binds a function to an object.
- It allows you to reference the object using the keyword
this
.
Without bind()
Here is an Object literal obj
, which holds two properties, and a function printProperties
, which prints the values of the keys a
and b
.
const obj = {
a: 1,
b: 2
};
function printProperties () {
console.log(`${this.a} , ${this.b}`);
}
However, since the printProperties
is not bound to any specific object yet, it is bound to the Window
object. Attempting to call printProperties
will result in the console logging undefined , undefined
.
printProperties(); // undefined , undefined
The fact that printProperties
is bound to the Window
object can be demonstrated by redefining printProperties
so that it logs this
:
function printProperties () {
console.log(this);
}
printProperties();
Here is a screenshot of the result:
How to use bind()
Since bind()
returns a "copy of the given function with the specified this value", it must be stored in a variable in order to be invoked properly.obj
can be bound to printProperties
as such:
// General Form: function_name.bind(object_name)
const boundPrintProperties = printProperties.bind(obj);
With bind()
Now that the function printProperties
is bound to obj
, calling it will correctly print the intended values:
boundPrintProperties(); // 1 , 2
We can even bind printProperties
to other objects.
Suppose we have another object named newObj
. We can bind newObj
with printProperties
by using the bind
method, then call it.
const newObj = {
a: 3,
b: 4
};
const newBoundPrintProperties = printProperties.bind(newObj);
newBoundPrintProperties(); // 3 , 4
newBoundPrintProperties()
correctly prints 3 , 4
.
We can understand bind()
as a method that "binds" a function to a specific object so that it can access the chosen object's methods and properties using the this
keyword.