Свойство объекта Javascript сохраняет себя и создает странный цикл - PullRequest
0 голосов
/ 24 января 2019

У меня есть объект (скажем, a), который имеет свойство (скажем, b), у которого есть свойство, которое является его родителем. Примерно так:

a: {
    a1 : a2,
    b  : {
        b1 : b2,
        b3 : a
    }
}

Это создает странный вид бесконечно длинного объекта, сохраняющего себя снова и снова, что я выяснил с помощью отладчика Chrome.

Но мой вопрос здесь заключается в том, что, несмотря на это, программа никогда не дает сбоев и работает очень гладко, без каких-либо зависаний или чего-то еще, даже на очень хреновом ноутбуке (без GPU). Как программе удается это сделать?

1 Ответ

0 голосов
/ 24 января 2019

a.b.b3 - это ссылка на a, а не копия, как объекты передаются в JavaScript. Это эквивалент указателя. Тот факт, что объект может перемещаться бесконечно, не означает, что он занимает бесконечное количество памяти. Если вы хотите увидеть, что вы имеете дело с одним и тем же объектом в памяти, вы можете сделать что-то вроде a.b1 = 'something else'; и попробовать пройти его снова. Изменение будет отражено, даже если вы углубитесь в иерархию, поскольку вы проходите через тот же объект в памяти.

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