Sobes.tech
Back to questions
Middle
6

```javascript const obj = { name: 'Alex', say() { console.info(this.name); } }; const fn = obj.say; fn(); obj.say(); ```

Companies where asked
Мыс

Answer from AI

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'