Загуба на контекст в кода на метод в ООП в 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()); // работи