Ich bin verwirrt, warum var obj = {};
oder var obj = new Object();
dann obj.getOwnPropertySymbols
ist undefiniert ??Wie hat das Objekt mehr Funktionen als ein tatsächliches Objekt?
Antwort
Object
selbst hat einige Methoden definiert, wie Object.keys
. Diese sind nicht unter Object.prototype
definiert, sodass sie für Objektinstanzen nicht verfügbar sind.
dang, ja ich weiß nicht, wie das für mich nicht offensichtlich war, sehr seltsam, keine Hilfsfunktionen auf den Prototyp zu setzen – neaumusic
Nein, es ist nicht. Wenn das passiert wäre, könntest du keine Methode namens 'keys()' zum Beispiel definieren, es wäre ein Alptraum für Rückwärtskompatibilität –
Technisch gesehen ist Object
(der Konstruktor) nicht vom Typ object
, es ist eine Klasse/Funktion, je nachdem, welchen Ausdruck Sie mit JS verwenden möchten. Da es sich um eine Klasse handelt, enthält sie Methoden, die nicht in Instanzen dieses Objekts verwendet werden. IE: Sie sind nicht auf dem Prototyp der zurückgegebenen Objekte.
In Ihrer Chrome-Konsole, versuchen Sie dies:
var obj = {};
typeof obj; // "object"
typeof Object; // "function"
Blick in die Prototyping-Weg-Klasse arbeitet in JS, wenn Sie eine Chance bekommen.
Um ein wenig zu verdeutlichen, wenn Sie new Object()
ausführen, gibt es etwas mit dem Typ object
zurück, der über die erforderlichen Methoden verfügt.
Ich denke, das ist eine gute Referenz von dem, was ich spreche: JavaScript - The Good Parts: Function prototypes vs Object prototypes
Sie können das gleiche Verhalten mit Number
und String
sehen. Die Typen von beiden sind eigentlich function
, aber sobald sie erstellt werden, erhalten Sie eine der Art number
oder string
, jeweils mit ihren relevanten Prototyp-Methoden.
Die untere Zeile ist der Konstruktor ist nicht das gleiche wie der zurückgegebene Wert.
was ist mit Strings oder Zahlen? – JordanHendrix
das ist einfach falsch ... – JordanHendrix
@JordanHendrix Eigentlich ist es nicht. – Jacques
Konstrukteurs haben zwei getrennte Arten von Methoden:
prototypische Methoden
Definiert als Eigenschaften von
Constructor.prototype
, sind die nur auf Instanzen zur Verfügung.Statische Methoden
Definiert als Eigenschaften von
Constructor
selbst, sind die einzige auf den Konstruktor zur Verfügung.
ES6 classe deutlich machen
class Constructor {
static foo() { return 123; }
bar() { return 456; }
}
Constructor.foo(); // 123
Constructor.bar; // undefined
new Constructor().foo; // undefined
new Constructor().bar; // 456
Ihr Fall besondere ist jedoch: Die statischen Methoden der Object
Konstruktor scheinen die prototypische Methoden aufzunehmen. Aber das liegt daran, Object
erbt von Object.prototype
.
Die prototypische Ketten sind wie
Object
Instanzinstance -> Object.prototype -> null
Object
KonstruktorObject -> Function.prototype -> Object.prototype -> null
Haha, du musstest es nur besser erklären als ich +1 – Jacques
- 1. DataContractSerializer serialisiert das gleiche Objekt mehr als einmal pro Anfrage
- 2. Wie verknüpft man mehr als ein Objekt in Xcode 4.2?
- 3. JS-Funktion nimmt ein Objekt als Eingabe und gibt ein Objekt zurück, das Aktionen für das übergebene Objekt ausführt
- 4. TypeError Objekt [Objekt Objekt] hat keine Methode SubSelf, TypeError Objekt [Objekt Objekt] hat keine Methode Schnittpunkte
- 5. Domain-Objekt, das mehr als einen Data Mapper benötigt
- 6. DataContractJsonSerializer.ReadObject (Stream-Stream): Kann ich mehr als ein Objekt lesen?
- 7. Wie ein Objekt erstellen - hat man: durch
- 8. Mehr als ein Objekt in der Recyclerview-Zeile
- 9. Wie ein Objekt deserialize in einer db jetzt, wenn das Objekt hat verschiedene serialVersionUID
- 10. Welches Objekt hat das Array am meisten Objekt
- 11. Wie kann ein Objekt in Glutendaten gespeichert werden, wenn das Modell aus mehr als einem Objekt besteht?
- 12. 'stepUp' hat ein Objekt aufgerufen, das keine Schnittstelle implementiert HTMLInputElement
- 13. AngularJS ngIf Objekt hat
- 14. Hat Chrome das dataTransfer-Objekt falsch implementiert?
- 15. Das angegebene Objekt wird nicht als falsches Objekt erkannt. Problem
- 16. Verwenden von LINQ für ein Objekt, das nur GetEnumerator() hat
- 17. Virtuelle Funktionen Objekt Slicing
- 18. Backbone.js - Uncaught TypeError: Objekt [Objekt Objekt] hat keine Methode 'Anwenden'
- 19. Ninject 2.0 - Bindung an ein Objekt, das die gleiche Schnittstelle mehr als einmal verwendet?
- 20. Wie konvertiert man ein jQuery-Objekt in ein d3-Objekt?
- 21. Uncaught TypeError: Objekt [Objekt Objekt] hat keine Methode 'on'
- 22. QTP nicht mehr Java-Objekt
- 23. Uncaught TypeError: Objekt [Objekt Objekt] hat keine Methode 'Anwenden'
- 24. Nehmen Sie ein Objekt als Konstruktor
- 25. JavaScript: Verweis auf einen lokalen Bereich für Funktionen als Objekt
- 26. Box2D: Wie erkennt man, dass ein Objekt nicht mehr mit einem anderen Objekt kollidiert?
- 27. Wie ein DOMNodeList-Objekt und ein DOMElement-Objekt echo?
- 28. Uncaught TypeError: Objekt [Objekt Objekt] hat keine Methode 'Autocomplete'
- 29. Wie zerstöre ich Daten, die mit einem Objekt verknüpft sind, nachdem das Objekt nicht mehr existiert?
- 30. Hat ein Objekt in Java Speicherbeschränkungen?
Welche IDE verwenden Sie? –
Dies ist in Chrom, nicht sicher, welche Version – neaumusic
Wie genau machst du es in Chrom? –