Создайте привязанную функцию через obj.show.bind(obj). Простое присваивание метода переменной копирует функцию, но не сохраняет объект вызова.
Восстановление объекта‑контекста после потери this
Создайте привязанную функцию через obj.show.bind(obj). Простое присваивание метода переменной копирует функцию, но не сохраняет объект вызова.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо гарантировать, что метод объекта сохраняет привязку к своему объекту, даже если его передать в отдельную переменную и вызвать оттуда.
const obj = {
a: 1,
show(num) {
if (num !== undefined) {
console.log(this.a + num);
return;
}
console.log(this.a);
},
};
const fn = obj.show;
fn();
Ответ
Создайте привязанную функцию через obj.show.bind(obj). Простое присваивание метода переменной копирует функцию, но не сохраняет объект вызова.
const fn = obj.show.bind(obj);
fn(); // 1
fn(5); // 6
bind возвращает новую функцию с фиксированным this и поддерживает последующую передачу аргументов. Альтернатива — обёртка (...args) => obj.show(...args), которая при каждом вызове заново читает obj.show. Это отличие важно, если метод позже заменят. Для разового вызова без создания обёртки можно использовать obj.show.call(obj, 5).