Будет ли валидно назначить метод `clear` напрямую как `memoized.clearCache = cache.clear`? Если нет, почему теряется контекст `this` и как исправить это с помощью `bind`?

Нет: при memoized.clearCache() значение this будет memoized, а Map.prototype.clear требует объект Map. Нужно привязать метод к cache или вызвать его из обёртки.

Короткий ответ

Что ответить на собеседовании

Нет: при memoized.clearCache() значение this будет memoized, а Map.prototype.clear требует объект Map. Нужно привязать метод к cache или вызвать его из обёртки.

Подробный разбор

Ответ с пояснениями

Нет: при memoized.clearCache() значение this будет memoized, а Map.prototype.clear требует объект Map. Нужно привязать метод к cache или вызвать его из обёртки.

memoized.clearCache = cache.clear.bind(cache);
// Либо:
memoized.clearCache = () => cache.clear();

Метод не запоминает объект, из которого его извлекли. Поэтому простое присваивание cache.clear переносит функцию, но не получателя вызова. bind сохраняет нужный this и при дальнейшем вызове через другую переменную.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее