Губење на контекст во кодот на методот во ООП во JavaScript

При употреба на изворниот код на методот од класата, контекстот може да се изгуби. Да погледнеме на пример. Нека имаме следнава класа:

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

Да создадеме објект од оваа класа:

javascriptlet user = new User('john');

Да го запишеме кодот на методот во променлива:

javascriptlet func = user.getName;

Во моментот на запишување на методот во променлива контекстот се изгуби. Сега this внатре во кодот на методот нема да покажува на објектот од класата. Да провериме, да ја повикаме нашата функција:

javascriptconsole.log(func()); // грешка

За решавање на проблемот може да се врзе контекстот на функцијата, на пример, преку bind:

javascriptfunc = func.bind(user);
console.log(func()); // работи