Сохранение объекта внутри себя

1

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

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

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

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

Фактически, когда я смотрю на консоль в Chrome и нажимаю для расширения свойств obj он говорит (по подсказке i):

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

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

Изображение 174551

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

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

  • 3
    Я думаю, что вы должны прочитать концепцию «ссылки». Объект не хранится внутри себя. Он содержит ссылку на себя.
  • 1
    «Является ли obj.obj просто ссылкой на obj» да. Окно и различные другие объекты также имеют собственные ссылки. window.window.window , window.top.top.top т. д. - все просто ссылки на один и тот же объект
Показать ещё 2 комментария
Теги:
object

1 ответ

2
Лучший ответ

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

Нет. Циркулярная ссылка - это как любая другая ссылка. У каждого экземпляра класса есть круговая ссылка:

instance.constructor.prototype.constructor.protototype

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

Да.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню