Сохранение объекта внутри себя - PullRequest
0 голосов
/ 09 июня 2018

Почему я могу хранить объект как его собственное свойство?Вот простой пример:

let obj = {};
obj['obj'] = obj;

Это приведет к созданию бесконечного дерева объектов: я могу вызвать obj с obj.obj.obj.obj или даже с obj.obj.obj.vobj.obj.obj.obj.obj.

Это проблема для производительности?Похоже, что это совсем не беспокоит браузер.

На самом деле, когда я смотрю на консоль в Chrome и нажимаю, чтобы развернуть свойства obj, которые она говорит (во всплывающей подсказке i *)1013 *):

Значение, указанное ниже, было оценено только сейчас

Таким образом, они были оценены именно тогда, когда я щелкнул, чтобы развернуть.

enter image description here

Значит ли это, что JavaScript тоже не будет смотреть на свойства obj, пока я к ним не получу доступ?

Является ли obj.obj просто ссылкой на obj?

1 Ответ

0 голосов
/ 09 июня 2018

Это проблема с производительностью?

Нет.Циркулярная ссылка, как и любая другая ссылка.Каждый экземпляр класса на самом деле имеет циклическую ссылку:

instance.constructor.prototype.constructor.protototype

Является ли obj.obj просто ссылкой на obj?

Да.

Значит ли это, что JavaScript тоже не будет смотреть на свойства obj, пока я к ним не получу доступ?

Да.И консоль не будет пытаться расширить ее, поскольку она будет зациклена на бесконечности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...