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



Чат с GPT Компилятор