Документация понятна:
Создает новый объект с указанным объектом-прототипом и свойствами.
Таким образом, Test
будет прототип нового объекта.Все экземпляры ссылаются на того же самого прототипа, и поскольку options
является объектом, они также имеют ссылку на этот объект.
Отношение выглядит следующим образом:
+------------+ +---------+ +--------+
| Instance 1 |----->| Test | | Object |
+------------+ | | | |
| options-|------>| name |
| name | +--------+
+---------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
Теперь, когда options
является объектом, если вы назначите ему новое свойство, например
instance1.object.name2 = 'bar';
, вы фактически получаете доступ к Test.options
.Результат будет:
+------------+ +---------+ +--------+
| Instance 1 |----->| Test | | Object |
+------------+ | | | |
| options-|------>| name |
| name | | name2 |
+---------+ +--------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
Но когда вы присваиваете новое значение для name
, в этом экземпляре будет создано новое свойство name
.Поэтому, когда вы выполните:
instance1.name = 'bar';
, результат будет
+------------+ +---------+ +--------+
| Instance 1 |----->| Test | | Object |
| | | | | |
| name | | options-+------>| name |
+------------+ | name | +--------+
+---------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
То же самое произойдет, если вместо простого доступа или присвоения свойства / / options
вы назначитеновое значение для него:
instance1.options = {name: 'another name'};
приводит к:
+--------+
| Object |
| |
| name |
+--------+
^
+------------+ | +---------+ +--------+
| Instance 1 |--+-->| Test | | Object |
| | | | | | |
| options----+--+ | options-|------>| name |
+------------+ | name | +--------+
+---------+
^
+------------+ |
| Instance 2 |-----------+
+------------+
Из-за того, как работает поиск свойства, instance1.options
вернет значение ближайшего (ближайшего) options
собственность в цепочке прототипов.Как только мы установим name
или options
в экземпляре, он вернет эти значения, а не значения прототипа (Test
).