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

Затенение метода прототипа и delete

Вопрос

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

const base = { greet() { return 'база'; } };
const obj = Object.create(base);
obj.greet = () => 'своё';
console.log(obj.greet());
delete obj.greet;
console.log(obj.greet());
console.log('greet' in obj, Object.keys(obj).length);

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

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

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

Коротко

Код выведет: своё, база, true 0. Присваивание создаёт собственный greet, он затеняет метод прототипа: своё. delete удаляет только собственное свойство, и поиск снова доходит до прототипа: база. in ищет по цепочке и находит greet: true.

Что выведет

своё
база
true 0

Разбор

Присваивание создаёт собственный greet, он затеняет метод прототипа: своё. delete удаляет только собственное свойство, и поиск снова доходит до прототипа: база. in ищет по цепочке и находит greet: true. Object.keys показывает только собственные перечисляемые ключи, их не осталось: 0.

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

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