Проверяет понимание работы прототипного наследования в JavaScript и того, как Object.create устанавливает связь между объектами через __proto__.
В JavaScript наследование построено на прототипах: каждый объект имеет скрытую ссылку на другой объект — свой прототип. Метод Object.create(proto) создаёт новый объект и сразу устанавливает его прототипом переданный объект proto. Свойство __proto__ (геттер/сеттер из Object.prototype) как раз даёт доступ к этому прототипу.
Когда вы пишете Object.create(proto), движок создаёт пустой объект и связывает его внутренний слот [[Prototype]] с proto. Обращение к obj.__proto__ вернёт именно proto. При поиске свойства сначала проверяется сам объект, затем его прототип, затем прототип прототипа и так далее — это и есть прототипная цепочка.
const animal = { speak() { return 'sound'; } };
const dog = Object.create(animal);
dog.name = 'Rex';
console.log(dog.__proto__ === animal); // true
console.log(dog.speak()); // 'sound' (из прототипа)
console.log(dog.hasOwnProperty('speak')); // false
// Прототип без наследования
const bare = Object.create(null);
console.log(bare.__proto__); // undefined
Child.prototype = Object.create(Parent.prototype).Object.create(null), чтобы избежать конфликтов с методами Object.prototype.Важно помнить: __proto__ — устаревший, но поддерживаемый способ доступа к прототипу. В современном коде предпочтительнее Object.getPrototypeOf(obj) и Object.setPrototypeOf(obj, proto).
Итог: Object.create(proto) создаёт объект, чей __proto__ указывает на proto, что позволяет гибко строить цепочки наследования и изолированные объекты без прототипа.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию