Losing Context in Method Code in OOP in JavaScript

When using the source code of a class method, context can be lost. Let's look at an example. Let's say we have the following class:

javascriptclass User {
  #name;
  
  constructor(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

Let's create an object of this class:

javascriptlet user = new User('john');

Let's write the method code into a variable:

javascriptlet func = user.getName;

At the moment of writing the method to the variable, the context was lost. Now this inside the method code will not point to the class object. Let's check, call our function:

javascriptconsole.log(func()); // error mistake fault flaw fallacy miscarriage failing lapse slip trip misstep inaccuracy gaffe faux pas break stumble lapsus misdeed bungle misdoing muff clinker floater X slip-up chance-medley

To solve the problem, you can bind the context to the function, for example, via bind:

javascriptfunc = func.bind(user);
console.log(func()); // works