JS ist eine objektbasierte Sprache, die objektorientierte Sprachen wie Java | C ++ unter Verwendung von objektorientierten Ideen simulieren kann.
• prozessorientiert
◦ Folgen Sie den Schritten zur Lösung des Problems
• Objektorientiert
◦Fokus auf die Objekte (Inhalte und Rollen), die zur Lösung des Problems erforderlich sind, und dann relevante Methoden gemäß bestimmten Regeln gemäß der Geschäftslogik aufzurufen.
Objekte werden in Systemobjekte und benutzerdefinierte Objekte unterteilt. Wir können Systemobjekte erstellen, indem wir den Systemkonstruktor wie Array | Datum usw. aufrufen. Benutzerdefinierte Objekte müssen selbst erstellt werden und können nicht mit Systemfunktionen erstellt werden.
JavaScript -Objekt erstellen
1. Erstellen Sie direkt
// Direkt erstellen // js ein Objekt erstellen // 1: Erstellen Sie ein leeres Objekt var person1 = new Object (); // 2: Fügen Sie die erforderlichen Eigenschaften und Methoden des Objekts in person1.name = "ager" hinzu; Konsole .log (Person1.Name); Person1.Gender = "männlich"; // 3: Methode zu diesem Objekt hinzugefügt | (Funktion) Person1. Manager = function () {console .log ("ager ist mein englischer Name"); } // 4: Aufrufen Objektmethode: Objekt. Methodenname (); Person1.Manager (); // Funktion | Methode? Wenn eine Funktion zu einem Objekt gehört, gehört die Funktion zur Methode unter diesem Objekt; Die Funktion wird durch den Methodennamen aufgerufen; // Variable | Attribut? Wenn eine Variable zu einem bestimmten Objekt gehört, ist die Variable die Methode unter diesem Objekt. Rufen Sie Variablen nach Attributnamen auf. // Personal erhöhen1.age = "6"; // personal ändern1.name = "lemon"; // Konsole .log (Person1.Name) prüfen; // Person löschen1.age; Konsole .log (Person1.age); ==> Undefined // Referenztyp, Speicheradresse // Grundtyp: Store Value Flag Bit/* var arr1 = [1,2,3,4] var arr2 = [5, 6, 7,9]; var arr2 = arr1; // arr2 [0] = 10; // den Wert in arr2 ändern, arr1 ändert auch alarm (arr1 [0]); // ===> 10 Referenztyp*/var per2 = neues Objekt (); Per2.Name = "Relia"; Per2.age = "18"; Per2.GENDER = "FEMAL"; Per2.Hobby = "Lemons"; // 1: Zugriff auf Eigenschaften durch. (Punktsyntax) // 2: Zugriff auf die Eigenschaften des Objekts über [] (Quadratklammern); Quadratische Klammern müssen Attribut -Zeichenfolgen oder Variablen sein, die Attribut -Zeichenfolgen speichern | Verwenden Sie quadratische Klammern var n = "name" //console.log(Per2 -"name" weibliches)//double zitate console .log (per2 [n]); für (var Eigenschaft in per2) {// console.log (per2 [Eigenschaft]); }Obwohl intuitiv, ist der Code überflüssig beim Erstellen mehrerer Objekte
2. Erstellen Sie mit Funktionen (Werksmodus).
Um das Problem mehrerer ähnlicher Objektdeklarationen zu lösen, können wir eine Methode namens Fabrikmuster verwenden, nämlich das Problem der Instanziierung von Objekten mit einer großen Anzahl von Duplikationen.
// Definieren Sie die Konstruktorfunktion CreatePerson (Name, Alter) {// Erstellen Sie ein neues leeres Objekt var Person = neues Objekt; // Attribut | Methode person.name = name; Person.age = Alter; Person. Manager = function () {console .log ("ai"); } // Rückkehrperson; } var per1 = createPerson ("Aier", 12); Konsole .log (per1.name); var per2 = CreatePerson ("Zitrone", 23); Konsole .log (per2.age); console.log (per2 Instanz des Objekts); // true console.log (per2 Instance of createPerson); // false // Die Objekttyp -Konsole.log kann nicht unterscheidenAusgezeichnet: Massenerstellung ähnlicher Fälle
Fehlende: Die Instanz verwendet ähnliche Attribute, wodurch Speicherabfälle öffentlich sind und der Typ des Objekts kann nicht unterschieden werden.
3.. Wörtliche Schöpfung
Ausgezeichnet: einfach und direkt
Fehlende: Es können keine ähnlichen Objekte in Chargen erstellen
// Das von Literalen erstellte Objekt verweist nicht auf die Instanz, sondern auf Objekt // Erstellen Sie var per1 = {Name: "Querschnitt", Konstruktor: Per1, Alter: 12, Geschlecht: "weiblich", Hobby: "Play", Eat: Function () {console.log (this.name); }} per1.eat (); // aternen per1.name = "lemon"; per1.eat (); // Zitronenkonsole.log (Typeof Per1); // Objektkonsole.log (Per1.Constructor == Objekt); // true4. Neu+Konstruktor
// Konstruktor erstellt ein Objekt, und seine untergeordneten Objekte werden durch Instanz nicht erkannt. Alle erstellt mit neuem+obj // Objekten werden erkannt, aber ein Codebereich wird immer noch verschwendet. ==> Produzieren Sie Prototyperstellung // JS -Objekt neu+Konstruktor // 1: Konstruktor erstellen | Normalerweise wird der erste Buchstabe aktiviertes Funktion CreatePerson (Name, Alter) {// 2: Affix die Attribute | Methode des Objekts auf diesem Zeiger. Wenn die Funktion aufgerufen wird, um ein Objekt zu erstellen, verweist dieser Zeiger auf dieses neue Objekt. // Dies wird diesem Objekt hinzugefügt. NAME = Name; this.age = Alter; /* this.speak = function () {// Hier zeigt dies auch auf die Erstellungsobjektkonsole.log (this.name+"Hallo"); }} /* CreatePerson.prototype.gender = "20"; CreatePerson.Prototype. ea = function () {console .log (this.name+ "sfd"); }*/// __Proto__: IS: Das Prototyp -Attribut im Instanzobjekt, das auf das Prototyp -Objekt zeigt, das dem entsprechenden Konstruktor entspricht // [[Prototyp]] // rufen Sie var per1 = new CreatePerson ("Stütze", "20"); var per2 = new CreatePerson ("Relia", "18"); Konsole .Log (Per1 Instance von CreatePerson); // == true console .log (per2 Instanz von CreatePerson); // ==> True Console .log (per1.speak == Per2.speak); // == Falsch bedeutet, dass das System zwei verschiedene Codebereiche geöffnet hat und Speicherabfälle verursacht.Es ist bequemer, ein wörtliches Erstellen zu erstellen, sodass es einen Konstruktor, einen normalen Konstruktor (Fabrikmuster) erzeugt und die Sub-Object-Instanz nicht erkannt wird und das Gedächtnis verschwendet wird. Verwenden Sie einen neuen+ Konstruktor, und das Unterobjekt wird erkannt, aber ein Code wird immer noch dupliziert, der Speicher verschwendet und der Prototypcode wird generiert, um ihn zu lösen.
5. Prototypmodus
Funktion createAnimal (Name, Alter) {//1.2: Binden Sie externe Parameter an das Instanzattribut this.name = name; this.age = Alter; } //1.3 Binden Sie dasselbe Attribut am Prototyp (Prototyp -Attribut, Prototyp -Methode) createAnimal.prototype CreateAnimal.Prototype.Style = function () {console.log (this.name + "iers"); }; // 2: Rufen Sie den Konstruktor an, um ein Objekt zu erstellen var cat1 = new CreateAnimal ("xiaohua", "2"); var cat2 = new CreateAnimal ("xiaohua", "2"); Cat1.Style (); console.log (Cat1.Style == Cat2.Style); // Die Methode bezieht sich auf die gleiche Adresse, das Attribut in das Prototyp -Objekt, um die Adresse zu speichern. Der Unterschied zwischen console.log (Cat1 -Instanz von CreateAnimal); // True Console.log (Cat1 Instanceof Object); // True Console.log (Cat1 Instanceof Object); // True Console.log (Cat1.constructor == Createanimal); // true console.log (cat1.constraust == Objekt); // == false // Der Prototyp des Konstruktors hat auch ein Konstruktorattribut, das sich auf die Konstruktorfunktionskonsole bezieht (createAnimal.prototype.Constructor == CreateAnimal); // true // In diesem Objekt wird die Eigenschaft existiert. Dieses Attribut handelt Gibt nicht falsch zurück; console.log (cat1.hasownProperty ("aaa")); // false Die nicht existierende Eigenschaft gibt eine falsche Konsole zurück. Prototype Property Tool Class Console.log (isPrototype ("Geschlecht", Cat1)); // True Function isPrototype (Prostring, OBJ) {if (Prostring in obj) {if (! obj.hasownProperty (Prostring)) {return true; } else {return false; }} else {return false; }}/*Funktion isProperty (Objekt, Eigenschaft) {// Beurteilen Sie, ob es eine Eigenschaft in der Prototypen -Rückgabe gibt!Dynamischer Prototypmodus
// Initialisieren Sie die Prototyp -Funktion pro (Name, Alter, Geschlecht) {this.name = name; this.age = Alter; this.Geper = Geschlecht; // Nur einmal bei der Initotisierung des Prototyps if (typed this.sayName! }}}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.