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