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