Vorgestern hinterließ ein Internetnutzer eine Nachricht mit der Frage: Was ist Object? Da ich in den letzten zwei Tagen damit beschäftigt war, das TreeView-Steuerelement zu rekonstruieren, tut es mir wirklich leid, dass ich nicht rechtzeitig geantwortet habe. Nehmen Sie sich heute etwas Zeit, um einen Blick darauf zu werfen, was genau ein Objekt in JavaScript ist. Welche Beziehung besteht zwischen Objekt und Funktion? Ich freue mich über Korrekturen, wenn ich falsch liege.
Obwohl es sich um eine private Nachricht handelt, hoffe ich, dass Sie mir keine Vorwürfe machen, wenn Sie sie anonym senden. Wenn etwas nicht stimmt, lassen Sie es mich bitte wissen.
Was genau ist das Objekt von js?
Zuerst dachte ich, Object sei der Prototyp aller Objekte in js.
Aber: Alert(Object.constructor) zeigt die Funktion Funktion an...
Das heißt, der Prototyp von Object ist Function?
Aber das Problem kommt wieder:
Function.prototype.read=function(){};//Erweiterter Funktionsprototyp
for(var i in Object)alert(i)//zeigt read an, was weiter bestätigt, dass der Prototyp von Object die Funktion
Object.prototype.read=function(){};//erweitert den Prototyp von Object
for(var i in Function)alert(i)//Anzeige lesen, der Prototyp der Funktion ist Objekt? ? ? ?
Was genau ist Objekt? Sind Objekt und Funktion als Klassen dasselbe?
Dieser Freund verwechselte Konstruktor, Prototyp und Funktion, weil JavaScript eine objektbasierte Sprache ist (JavaScript enthält keine richtigen Klassen). Eigentlich kann man sagen, dass Object der Prototyp aller Objekte ist, aber das bezieht sich auf das Konzept des Prototyps im Prototype Pattern im Entwurfsmuster und nicht auf die Prototyp-Sprachfunktion von JavaScript namens Object.prototype.
Was genau ist ein Objekt in JavaScript? Script56.chm (das offizielle M$-Tutorial) sagt: Bietet gemeinsame Funktionen für alle JScript-Objekte. Na, verstehst du? Denn ich sollte es verstehen, aber ich scheine @_@ immer noch nicht zu verstehen. Wenn wir uns die Datenstruktur ansehen, ist ein Objekt (eine Instanz von Object) eine ungeordnete Sammlung, eine Struktur ähnlich der Karte in C++, der Hashtabelle in C# und der Hashmap in Java. Und es enthält einen vom JavaScript-Sprachsystem zugewiesenen primitiven Wert. Das Objekt verfügt über eine Methode namens valueOf, deren Funktion darin besteht, den ursprünglichen Wert des angegebenen Objekts zurückzugeben. Dies ist auch in Script56 zu finden, und es gibt auch eine Tabelle, die die valueOf-Rückgabeergebnisse von Systemobjekten auflistet. Mit anderen Worten: Objekte wie Array, Boolean, Datum, Funktion, Zahl usw. stammen tatsächlich alle von Object und ihre Vorfahren sind alle Object. Sie stellen verschiedene Sprachfunktionen dar. Array verfügt beispielsweise über ein automatisch verwaltetes Längenattribut, Boolean hat nur wahre oder falsche Werte, Date stellt eine Zeitstruktur dar und Function kann ausgeführt werden ). Objekt ist eigentlich nur ein Konzept. Die JavaScript-Sprache basiert auf Objekten, was bedeutet, dass alle integrierten Typen von einer Reihe gemeinsamer Methoden und Eigenschaften (auch Verhalten und Zustände genannt) abstrahiert werden Diese Eigenschaften sind Objekt. Tatsächlich ist Object in der Programmierung nicht sehr nützlich. Wir alle verwenden das Instanzobjekt von Object und verwenden dann die Sammlungsfunktion von Object (expando), um das Objekt so zu erweitern, dass es zu dem wird, was wir wollen. Für Object.prototype ist es eigentlich nicht sehr nützlich, da jeder spezifische Typ seinen eigenen Prototyp hat und die meisten der von uns hinzugefügten Prototypmethoden für bestimmte Typen gelten.
Neben dem Prototyp verfügt Object auch über ein sehr wichtiges Attribut – den Konstruktor. Dieses Ding wird verwendet, um die zuvor erwähnte Objekterweiterung abzuschließen. Es ist auch die Grundlage für die Verwendung von JavaScript zur Simulation von OOP. Da in JavaScript alles ein Objekt ist, ist es auch der Konstruktor, aber sein ursprünglicher Typ ist Function (führen Sie Object.constructor.valueOf() aus, um Folgendes zu erhalten: function Function() { [nativer Code] }). Umgekehrt verfügen natürlich nicht alle JavaScript-Objekte über ein Konstruktorattribut, und einige integrierte Objekte verfügen nicht über einen Konstruktor.
Was die Beziehung zwischen Objekt und Funktion betrifft, denke ich, dass dies kein guter Testcode ist: Function.prototype.read=function(){};//Prototyp einer erweiterten Funktion
for(var i in Object)alert(i)//zeigt read an, was weiter bestätigt, dass der Prototyp von Object die Funktion
Object.prototype.read=function(){};//erweitert den Prototyp von Object
for(var i in Function)alert(i)//Anzeige lesen, der Prototyp der Funktion ist Objekt?
Diese vier Codezeilen werden verwendet, um das Prinzip des JavaScript-Prototyps zu erklären und die Prototyp-Vererbungsmethode der OO-Programmierung zu simulieren. Sie können jedoch die Beziehung zwischen Objekt und Funktion nicht klar erklären: (Im Gegenteil, sie werden täuschen
uns
kurz die verschiedenen Funktionen in JavaScript-Objekttypen beschreiben:
Natives Objekt: Von der JavaScript-Sprache bereitgestellte Objekte, die nicht vom Ausführungshost abhängen. Einige davon sind integrierte Objekte, z. B. Global und Math, andere werden in der Skriptausführungsumgebung erstellt und verwendet, z. B. Array, Boolean , Datum, Funktion, Zahl, Objekt, RegExp, Fehler.
Eingebautes Objekt: Von der JavaScript-Sprache bereitgestellte integrierte Objekte, die nicht vom Ausführungshost abhängen, wie z. B. integrierte Objekte vom Typ Global und Math, sind alle native Objekte.
Hostobjekt: Jedes von der JavaScript-Sprache bereitgestellte Objekt, das von der Hostumgebung abhängt. Alle nicht-nativen Objektobjekte sind Hostobjekte, wie zum Beispiel: Fenster im IE, Wscript-Instanz in WScript, jede vom Benutzer erstellte Klasse