Ich weiß, dass Sie ein Property-Deskriptor-Objekt einer bestimmten Eigenschaft 'prop
' eines bestimmten Objekts obj
mit Object.getOwnPropertyDescriptor(obj,"prop");
erhalten können. Ich habe mich nur gefragt: Wo sind diese Objekte gespeichert? Sind sie intern in einem Objekt gespeichert oder .... anderswo? Ich habe versucht, sie in Entwickler-Tools zu finden, aber ohne Glück.Wo sind die Eigenschaften des Deskriptor-Objekts gespeichert?
Antwort
Eigenschaftsdeskriptorobjekte sind nicht vorhanden, sofern nicht explizit angefordert. Sie werden ad-hoc erstellt, wenn Sie call Object.getOwnPropertyDescriptor
. So folgenden Code:
var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');
bewerten Sie immer auf false gesetzt.
Wie wir sehen (sowohl Code als auch Spezifikation), werden Property-Deskriptor-Objekte nicht gespeichert, sondern bei Bedarf erstellt.
wo So writable
, configurable
, value
, get
, set
... atributtes gespeichert? Spezifikation erfordert nicht, dass sie Benutzercode ausgesetzt werden ... Here is C++ definition for V8 PropertyDescriptor class - es scheint wie jede Eigenschaft ein Byte belegen.
Und wenn Sie überprüfen möchten, ob Eigenschaft beschreibbar, konfigurierbar oder ähnlich ist, Firefox-Konsole ermöglicht es Ihnen, dies zu tun (aber nur, wenn Eigenschaft ist nicht beschreibbar oder hat Getter/Setter):
Aber nicht * irgendein Objekt * - im Vergleich zu einem anderen Objekt - Rückgabe false? Zum Beispiel '[1,2,3] == [1,2,3]' ist auch 'false' – Danield
Objekte werden durch Referenz verglichen (" es ist ** das gleiche ** Objekt "), nicht nach Wert (" es ist ** identisches ** Objekt "). Z.B. 'var a = {}, b = a; a === b; // true' – Ginden
ja, du hast recht :) – Danield
Aus meiner Lektüre die Spezifikation, ruft zu dieser Funktion auf (http://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty), wo sie die Rückkehr von einer Reihe von verschiedenen [] [interne Eigenschaften]] '. Diese Eigenschaften müssen nicht der Endlaufzeitumgebung zur Verfügung gestellt werden, aber einige Implementierungen stellen sie möglicherweise zur Verfügung, z. B. in den Entwicklungstools. Ihr Kilometerstand kann variieren ... –
Sie werden gespeichert, wo immer sich eine bestimmte Implementierung entscheidet, um sie zu speichern, oder, wahrscheinlicher, sie werden konstruiert, wenn sie danach gefragt werden. –