Свойства объекта в консоли браузера
Всякий раз, когда я регистрирую любой объект javascript в браузере, я стремлюсь исследовать его, раскрывая то, что находится внутри окна консоли, как один из таких примеров:
console.log(console);
Я уверен, что нашел то, что находится внутри, но настоящий запрос начинается сейчас. Когда я раскрываю объект, у него есть свойство с именем __proto__ с его под-свойствами внутри, затем снова это имеет свойство contructor, и цикл продолжается так же, как __proto__ и снова и так далее.
Это заканчивается?
Если да, что означает это многократное повторение?
Если нет, то почему браузер не зависает при печати такого бесконечного объекта?
- Любые ведет высоко ценится
Спасибо и С наилучшими пожеланиями Шохил Сетия
1 ответ
Если да, что означает это многократное повторение?
Дерек уже дал вам ссылку, объясняющую цепь прототипов.
Если нет, то почему браузер не зависает при печати такого бесконечного объекта?
__proto__
является особым свойством и будет обрабатываться особым образом. Вместо этого давайте возьмем общий пример:
var a = {
nest : function() {
this.b = this;
}
}
a.nest();
Это создаст объект a
что имеет свойство b
это указывает на основной объект a
сам.
Если вы делаете console.log(a)
вы увидите такое же поведение, как вы видели в случае __proto__
, Вы можете продолжать расширять собственность b
N раз, и он всегда будет показывать объект, который имеет свойство b
и метод nest
,
В этом случае браузер не зависает, потому что он перебирает только один уровень свойств. Когда вы пытаетесь расширить свойство b
он снова будет повторяться только на 1 уровне подсвойств. Он никогда не перебирает вложенные свойства и, следовательно, не сталкивается с какими-либо проблемами. С другой стороны, если вы пытаетесь использовать JSON.stringify(a)
он выдаст ошибку о циклической ссылке, потому что для генерации строки из объекта необходимо выполнить итерацию по всем вложенным свойствам.