Страта кантэксту ў кодзе метаду ў ААП у 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()); // працуе