Загуба на контекст в кода на метод в ООП в JavaScript
При използване на изходния код на метод от клас може да се загуби контекст. Нека разгледаме пример. Да предположим, че имаме следния клас:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Нека създадем обект от този клас:
let user = new User('john');
Нека запишем кода на метода в променлива:
let func = user.getName;
В момента на записване на метода в променлива
контекстът се загуби. Сега this
вътре в кода на метода няма да сочи
към обекта от класа. Нека проверим, да извикаме
нашата функция:
console.log(func()); // грешка
За решаване на проблема може да се свърже
контекстът към функцията, например,
чрез bind:
func = func.bind(user);
console.log(func()); // работи