Назад к вопросам
Middle
5
```javascript const obj = { name: 'Alex', say() { console.info(this.name); } }; const fn = obj.say; fn(); obj.say(); ```
Компании, где спрашивали
Мыс
Ответ от нейросети
sobes.tech AI
В этом коде происходит следующее:
const obj = {
name: 'Alex',
say() { console.info(this.name); }
};
const fn = obj.say;
fn(); // undefined
obj.say(); // 'Alex'
Когда вызывается obj.say(), контекст this внутри метода указывает на объект obj, поэтому выводится 'Alex'.
Однако при присваивании const fn = obj.say; функция say теряет привязку к объекту, и при вызове fn() this становится либо undefined (в строгом режиме), либо глобальным объектом (в нестрогом). В результате this.name не определён, и выводится undefined.
Чтобы сохранить контекст, можно использовать bind:
const fn = obj.say.bind(obj);
fn(); // 'Alex'