2017-07-19 4 views
-2

Immer, wenn ich log jede JavaScript-Objekt in Browser, ich bin daran interessiert, es zu erkunden durch die Erweiterung, was im Inneren im Fenster Konsole ist, Als ein solches Beispiel istObjekteigenschaften in Browserkonsole

console.log(console); 

Ich bin sicher, was ist drin, aber die echte Abfrage beginnt jetzt, Wenn ich das Objekt erweitern, hat es eine Eigenschaft namens __proto__ mit seinen Untereigenschaften innerhalb, dann wieder hat dies eine Eigenschaft von constructor und der Zyklus geht weiter, wie es __proto__ und wieder und so weiter hat.

Ende?

Wenn Ja, was bedeutet diese mehrfache Wiederholung?

Wenn Nein, Warum hängt Browser nicht beim Drucken solcher unendlich Objekt?

  • Alle Leads sehr
  • geschätzt

Dank & Grüße Shohil Sethia

+2

Sie möchten mehr darüber lesen, was [Prototyp-Kette] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) und Vererbung sind. Tdrr die Kette geht nicht für immer weiter. –

Antwort

0

Wenn ja, was bedeutet das mehrmalige Wiederholung bezeichnet?

Derek hat Ihnen bereits einen Link zur Erläuterung der Prototypkette gegeben.

Wenn nein, warum hängt der Browser beim Drucken eines solchen unendlichen Objekts nicht?

__proto__ ist eine besondere Eigenschaft und wird in besonderer Weise behandelt. Stattdessen lässt ein allgemeines Beispiel nehmen:

var a = { 
 
    nest : function() { 
 
    this.b = this; 
 
    } 
 
} 
 

 
a.nest();

Dieses ein Objekt erstellen, wird a, das eine Eigenschaft hat b, die auf dem Hauptobjekt zeigt a selbst.

Wenn Sie console.log(a) tun, werden Sie das gleiche Verhalten wie im Fall von __proto__ sehen. Sie können die Eigenschaft b N mehrmals erweitern und es wird immer ein Objekt mit einer Eigenschaft b und einer Methode angezeigt.

In diesem Fall hängt der Browser nicht, weil er nur auf einer Ebene der Eigenschaften iteriert. Wenn Sie versuchen, die Eigenschaft b zu erweitern, wird sie erneut nur auf einer Ebene von Untereigenschaften ausgeführt. Es wird nie auf geschachtelte Eigenschaften iteriert und daher kein Problem auftritt. Auf der anderen Seite, wenn Sie versuchen, JSON.stringify(a) zu verwenden, wird es einen Fehler über Zirkelverweis geben, da zum Generieren einer Zeichenfolge aus dem Objekt auf alle verschachtelten Eigenschaften durchlaufen werden muss.

+0

Also bei jedem Klick auf das Objekt iteriert es auf der nächsten Unterebene der Eigenschaften. Ist das was du meinst? In Ordnung, etwas Neues, das ich nie durchgemacht habe. Danke! –

Verwandte Themen