Создание объектов
Через литерал объекта - { }
Распространенный способ создания объекта - это объявление его через фигурные скобки ( { } ) - литерал объекта.
const object = { };
console.log(object); Мы создали объект, который хранится в переменной object 
Консоль выведет нам сущность - пустые фигурные скобки и [[Prototype]] - единственное пока свойство нашего нового объекта, которое мы ему не добавляли. Это свойство является наследуемым от конструктора Object - прародителя всех объектов в JavaScript и хранит в себе методы конструктора Object, доступные текущему объекту, который мы создали и смотрим в консоль, через прототип. 
Прототип чем-то схож с генной наследственностью у людей.
Конструктор Object - первый предок, объект, что мы создали и храним в переменной object  - первый потомок конструктора Object и через прототип наследует свойства и методы конструктора.
Исходя из знания, что объекты могут и наследуют через прототип свойства и методы, переходим к следующему способу создания объектов.
Через Object.create()
Object - это конструктор всех объектов в JavaScript. 
Он наделен набором свойств и методов, что мы увидели в [[Prototype]] объекта, который создали через литерал.
Благодаря прототипному наследованию объектов в JavaScript, мы имеем возможность создавать новые объекты, которые будут наследовать свойства и методы от других, созданным нами же объектов или же объекты, без какого-либо наследования вовсе.
Для этого нам следует использовать конструктор Object и его метод create().
Метод Object.create() создаёт новый объект с указанным прототипом и свойствами.
const object = Object.create({});
console.log(object);Если в вызов метода create() мы передадим пустой литерал {} объекта, то создастся новый объект, у которого будет два предка - оба конструкторы Object. 
const object = Object.create(Object.prototype);
console.log(object);А если в вызов Object.create() передать аргументом свойство prototype конструктора Object, то получится новый объект, как при создании через литерал.
const object = Object.create(null);
console.log(object); // создаём объект с нулевым прототипомЕсли в вызов метода create() мы передадим примитив null, то создастся новый объект без наследуемых свойств и привязки к конструктору Object.
А вот, если при создании нового объекта через Object.create() с наследием или нет, но при этом еще и сразу добавить какие-либо свойства, мы можем сделать это, указав вторым аргументом в вывоз create() объект {}, где перечислить свойства со значениями, при этом значения должны быть переданы внутри объектов, где указываются важные параметры для будущего свойства: writable и configurable для определения читабельности и изменения добавляемого значения, также value для обозначения самого значения.
const object = Object.create(Object.prototype, {
  a: { writable: true, configurable: true, value: 'Hello' },
});
console.log(object ); // { a: 'Hello' } Last updated