Что выведет код Senior this, call, apply, bind обновлено

Копирование методов в другой объект

Вопрос

Что выведет код? По строке на каждый вывод.

let baz = 0;

const foo = {
  bar1: function () { return this.baz; },
  bar2: () => (typeof baz === 'undefined' ? 'нет' : baz),
  baz: 1,
};

const fooCopy = {
  bar1: foo.bar1,
  bar2: foo.bar2,
  baz: 2,
};

console.log(fooCopy.bar1());
console.log(fooCopy.bar2());

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 2, 0. Почему так bar1 скопирован как ссылка на функцию, но вызывается через fooCopy - значит this равен fooCopy и вернётся два. bar2 стрелочная: её this зафиксирован при объявлении и к объекту отношения не имеет, поэтому она читает внешнюю…

Что выведет

2
0

Разбор

Почему так

bar1 скопирован как ссылка на функцию, но вызывается через fooCopy - значит this равен fooCopy и вернётся два. bar2 стрелочная: её this зафиксирован при объявлении и к объекту отношения не имеет, поэтому она читает внешнюю переменную baz. Отсюда правило: методы объектов не пишут стрелками, если внутри нужен this.

Вывод

2
0

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.