Что выведет код Middle Прототипы и классы обновлено

Массив в прототипе общий для всех

Вопрос

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

function Cart() {}
Cart.prototype.items = [];
const a = new Cart();
const b = new Cart();
a.items.push('хлеб');
console.log(b.items.length);
a.items = ['молоко'];
console.log(b.items.length, a.items.length);
console.log(Object.hasOwn(a, 'items'), Object.hasOwn(b, 'items'));

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

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

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

Коротко

Код выведет: 1, 1 1, true false. a.items.push это чтение items (найден в прототипе) и мутация общего массива, поэтому b видит 1 элемент.

Что выведет

1
1 1
true false

Разбор

a.items.push это чтение items (найден в прототипе) и мутация общего массива, поэтому b видит 1 элемент. Присваивание a.items = [...] создаёт собственное свойство в a, прототип не трогается: у b по-прежнему общий массив из одного элемента, у a свой из одного. Собственное items теперь есть только у a.

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

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