Что выведет код 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 ошибок.