Создание объектов

Через литерал объекта - { }

Распространенный способ создания объекта - это объявление его через фигурные скобки ( { } ) - литерал объекта.

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