Свойства объекта в консоли браузера

Всякий раз, когда я регистрирую любой объект 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) он выдаст ошибку о циклической ссылке, потому что для генерации строки из объекта необходимо выполнить итерацию по всем вложенным свойствам.

Другие вопросы по тегам