Вебсправочник
Справочник JavaScript

Object.create(): объект с заданным прототипом

Object.create создаёт объект с явно выбранным прототипом. Он позволяет отделить собственные данные от унаследованного поведения без копирования всех полей образца.

Назначение

Object.create создаёт объект с явно выбранным прототипом. Он позволяет отделить собственные данные от унаследованного поведения без копирования всех полей образца.

Как это работает

Переданный объект становится прототипом, а не набором скопированных свойств. Object.create(null) создаёт объект без обычного Object.prototype. Его ключи удобно проверять через Object.hasOwn, не ожидая собственного метода hasOwnProperty.

Пример

const defaults = {language:"ru"};
const lesson = Object.create(defaults);
lesson.title = "Разметка";
console.assert(lesson.language === "ru");
console.assert(!Object.hasOwn(lesson, "language"));
console.assert(Object.getPrototypeOf(lesson) === defaults);
const dictionary = Object.create(null);
dictionary.html = 1;
console.assert(Object.getPrototypeOf(dictionary) === null);
console.assert(Object.hasOwn(dictionary, "html"));
console.log(Object.keys(lesson));

Что должно получиться

Язык читается через прототип, а список собственных ключей содержит только title. Второй объект имеет null-прототип и хранит учебное значение по ключу html.

Граница применения и частая ошибка

Изменение defaults может изменить наблюдаемое наследуемое значение у всех связанных объектов. Это не глубокое копирование. Null-прототип не проверяет безопасность пользовательских ключей и не заменяет прикладные ограничения; для произвольной коллекции рассмотрите Map.

Самостоятельная проверка

Измените language в defaults, затем задайте собственный language у lesson. Сравните чтение и Object.hasOwn. Объясните разницу между наследованием, затенением свойства и копированием объекта.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.