JS JavaScript  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Прототипы и цепочка наследования

Вопросы требуют проследить поиск свойства по цепочке прототипов, понять затенение и удаление собственных значений, создать наследника через Object.create и оценить поведение функций-конструкторов, instanceof и замены prototype.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов и 55 минут; код лучше читать построчно, не полагаясь на первое впечатление. После завершения откроются общий процент, 4 тематических шкал и объяснение каждого решения.
Вопрос 1 из 20
Какое сравнение вернёт true?
JavaScript
function Item() {}
const item = new Item();
Вопрос 2 из 20
Что является прототипом обычного литерала объекта?
JavaScript
const obj = {};
console.log(Object.getPrototypeOf(obj));
Вопрос 3 из 20
Какой результат даст цепочка?
JavaScript
const base = { kind: "base" };
const child = Object.create(base);
console.log(Object.getPrototypeOf(child) === base);
Вопрос 4 из 20
Почему частый Object.setPrototypeOf на уже используемых объектах нежелателен?
Вопрос 5 из 20
Что означает null в конце цепочки прототипов?
Вопрос 6 из 20
Что выведет чтение после присваивания?
JavaScript
const base = { name: "base" };
const child = Object.create(base);
child.name = "own";
console.log(child.name);
Вопрос 7 из 20
Что произойдёт после delete?
JavaScript
const base = { name: "base" };
const child = Object.create(base);
child.name = "own";
delete child.name;
console.log(child.name);
Вопрос 8 из 20
Считает ли child унаследованное x собственным свойством?
JavaScript
const child = Object.create({ x: 1 });
console.log("x" in child, Object.hasOwn(child, "x"));
Вопрос 9 из 20
Что произойдёт, если в прототипе есть сеттер без геттера, а экземпляру присвоить это имя?
Вопрос 10 из 20
Почему значение undefined не доказывает отсутствие свойства?
Вопрос 11 из 20
Что выведут два экземпляра?
JavaScript
function Store(value) { this.value = value; }
Store.prototype.read = function () { return this.value; };
const a = new Store(1);
const b = new Store(2);
console.log(a.read === b.read);
Вопрос 12 из 20
Что выведет старый экземпляр после замены prototype?
JavaScript
function Store() {}
Store.prototype.kind = "old";
const oldItem = new Store();
Store.prototype = { kind: "new" };
console.log(oldItem.kind);
Вопрос 13 из 20
Что выведут проверки instanceof?
JavaScript
function Store() {}
const oldItem = new Store();
Store.prototype = {};
const newItem = new Store();
console.log(oldItem instanceof Store, newItem instanceof Store);
Вопрос 14 из 20
Зачем методы обычно помещают в prototype, а данные экземпляра — в конструктор?
Вопрос 15 из 20
Как Object.create(proto, descriptors) отличается от new Constructor()?
Вопрос 16 из 20
Что выведут вызовы методов?
JavaScript
function Store() {}
Store.prototype.read = () => "base";
const a = new Store();
const b = new Store();
a.read = () => "own";
console.log(a.read(), b.read());
Вопрос 17 из 20
Как вызвать прототипную реализацию с текущим объектом this?
Вопрос 18 из 20
Каков результат переопределённого calc, вызывающего базовый метод через call?
JavaScript
const base = {
  calc() { return this.value * 2; }
};
const child = Object.create(base);
child.value = 5;
child.calc = function () {
  return base.calc.call(this) + 5;
};
console.log(child.calc());
Вопрос 19 из 20
Что фактически проверяет obj instanceof Ctor?
Вопрос 20 из 20
Какой риск несёт запись метода прямо на множество экземпляров?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу