DEV Community

Huseyin Gumus
Huseyin Gumus

Posted on • Updated on

The Power of Binding: A Beginner's Guide to Bind method in JavaScript

In JavaScript, "binding" refers to the process of setting up a connection between an object and a function. There are several ways to bind an object to a function in JavaScript, but the most common way using "bind" method.

Here's an example of how you might use the "bind" method to bind an object to a function:

const object = {
  name: 'Raskolnikov',
  sayHello: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

const boundFunction = object.sayHello.bind(object);

boundFunction(); //Output: "Hello, my name is Raskolnikov"

Enter fullscreen mode Exit fullscreen mode

In this example, the "sayHello" function is bound to the "object" using the "bind" method. This means that when the "boundFunction" is called, the value of "this" within the function will be set to the "object" object. As a result, calling "bound" will output "Hello, my name is Raskolnikov".

There are other ways to bind an object to a function in JavaScript, such as using the "call" and "apply" methods. However, the "bind" method is the mostt common and is often the easiest to use.

To make it more clear let's look at a real-life example:

Imagine you have a class for representing employees at a company. Each employee has a name and a salary, and you want to create a method for calculating the monthly paycheck for an employee. Here us how you might define class:

class Employee {
  constructor(name, salary) {
    this.name = name;
    this.salary = salary;
  }

  calculatePaycheck() {
    return this.salary / 12;
  }
}

const tony = new Employee("Tony", 80000);
const ezekiel = new Employee("Ezekiel", 97000);

Enter fullscreen mode Exit fullscreen mode

Now, suppose you want to create a function that calculates the total payroll for all the employees at the company. To do this, you can use the "bind" method to bind each employee object to the "calculatePaycheck" function, so that the correct salary is used for each employee.

function calculateTotalPayroll(employees) {
  let totalPayroll = 0;
  for (const employee of employees) {
    totalPayroll += employee.calculatePaycheck.bind(employee)();
  }
  return totalPayroll;
}

const employees = [tony, ezekiel];
const totalPayroll = calculateTotalPayroll(employees);


Enter fullscreen mode Exit fullscreen mode

In this example, the "calculateTotalPayroll" function accepts an array of employee objects as an argument. It then iterates over the array, binding each employee object to the "calculatePaycheck" function using the "bind" method, and calling the resulting function to calculate the monthly paycheck for each employee. Finally, it adds up all the paychecks and returns the total payroll for the company.

By using the "bind" in this way, you ensure that the correct salary use used for each employee when calculating their paychecks, even if you don't have direct acess to the employee objects within the "calculateTotalPayroll' function.

An important thing to note about binding is that it creates a new function, rather than modifying the original function. This means that the original function is not changed in any way, and you can bind the same function to multiple objects if needed.

To wrap up, binding is an important concept in JavaScript that allows you to set up a connection between an object and a function. The most common way to bind an object to a function is using the "bind" method, which creates a new function that is connected to the original function, but with the specified object bound to "this". Binding can be useful in a variety of situations, such as when you want to use the same function with multiple objects, or when you want to pass an object as an argument to a function that doesn't have direct access to that object.

I hope this article helps you clarify how binding work in JavaScript.

If you have any questions or comments, please don't hesitate to invoke them!

Top comments (5)

Collapse
 
jboxman profile image
Jason Boxman

There's a missing indentation in this:

for(const employee of employees) {
    totalPayroll +=

employee.calculatePaycheck.bind(employee)();
  }
Enter fullscreen mode Exit fullscreen mode
Collapse
 
erhaneth profile image
Huseyin Gumus

Thank you for the catch. Just fix it.

Collapse
 
fruntend profile image
fruntend

Сongratulations 🥳! Your article hit the top posts for the week - dev.to/fruntend/top-10-posts-for-f...
Keep it up 👍

Collapse
 
lotfijb profile image
Lotfi Jebali

Well explained

Collapse
 
erhaneth profile image
Huseyin Gumus

Thank you, Lotfi!