Überblick
Worüber sprechen wir, wenn wir über objektorientierte Programmierung sprechen?
Wir sprechen zuerst über einige Konzepte: Objekte, Klassen, Kapselung, Vererbung, Polymorphismus.
Objekte und Klassen sind die Grundlage für objektorientierte Objektorientierung, und die Kapselung, Vererbung und Polymorphismus sind die drei Hauptmerkmale der objektorientierten Programmierung.
JavaScript bietet Objekte, aber es fehlen Klassen, und es kann eine Klasse wie C#nicht explizit definieren.
Die Funktionsfunktionen von JavaScript sind jedoch sehr flexibel, von denen einer der Konstruktor ist, der "Klassen" in Kombination mit Konstruktoren und Prototypobjekten implementieren kann.
Objekte und Klassenkonzepte
Objekt
"Objekt" ist ein sehr wichtiges Konzept in der objektorientierten Programmierung. Ein Objekt ist eine Beschreibung eines "Ding" (jemand oder etwas).
Menschen und Dinge kommen aus dem wirklichen Leben, und unser Verständnis der realen Welt ist unser Verständnis von Menschen und Dingen.
Im Programm der Programmierung ist Code für normale Personen abstrakt, und die Anwendung von Code besteht darin, reale Probleme besser zu lösen.
Während der Analyse- und Designphasen kann das Konzept von "Objekt" die realen Probleme besser widerspiegeln.
Umgekehrt enthält der Code eine Logik, die zur Beschreibung des Geschäfts verwendet wird. Das Unternehmen enthält einige Geschäftswissen. Das Geschäftswissen wird durch Verständnis und Analyse der realen Welt zusammengefasst. Diese Probleme bestehen aus "Objekten" in der realen Welt.
Objekte enthalten Merkmale und Verhaltensweisen. In OOP -Begriffen sind Merkmale Attribute von Objekten und Verhaltensweisen sind die Methoden der Objekte.
Art
In der realen Welt können ähnliche Objekte nach bestimmten Standards gruppiert werden. Zum Beispiel sind "Kolibris" und "Eagles" beide in Vögel unterteilt. Vögel sind keine spezifischen Objekte. Sie sind ein Konzept, das von Menschen zusammengefasst wurde, nachdem ähnliche Merkmale und Verhaltensweisen auf bestimmten Vögeln wie "Kolibris" und "Eagles" analysiert wurden. Eine Klasse entspricht einer Vorlage und wir können auf dieser Vorlage unterschiedliche spezifische Objekte erstellen.
In C#können wir einen Vogel definieren.
/// <summary> //// birds /// </summary> öffentlicher Klasse Bird {public void fly () {console.writeLine ("Ich kann fliegen!"); }}Obwohl JavaScript eine objektorientierte Programmiersprache ist, bietet es keine Syntaxunterstützung für die Klasse.
In JavaScript basiert alles auf Objekten. Sogar der "Prototyp", über den wir später sprechen werden, sind Objekte. Die Vererbung und Wiederverwendung von JavaScript werden ebenfalls durch Prototypen implementiert.
Das Kombinieren von Konstruktoren und Prototypobjekten kann jedoch die "Klassen" von JavaScript implementieren.
Konstruktor
Zuvor haben wir New Array () verwendet, um ein Array zu erstellen und neue Objekte () zu erstellen, um ein Objekt zu erstellen. Array () und Object () sind zwei integrierte Konstruktoren in JavaScript. Obwohl JavaScript keine Klassen bietet, können wir Array und Objekt als Konzept der "Klassen" verstehen.
Es ist zu beachten, dass die "Klasse" von JavaScript vom Konstruktor implementiert wird.
Definieren Sie den Konstruktor
Konstruktoren sind ebenfalls Funktionen, und es gibt keinen Syntaxunterschied zwischen der Definition von Konstruktoren und anderen Funktionen.
Der einzige Unterschied besteht darin, dass der erste Buchstabe des Konstruktors aktiviert werden sollte, was auch die Programmierspezifikation von JavaScript ist.
Das Folgende definiert einen Person () Konstruktor, den wir als Personklasse verstehen können.
Funktion person () {console.log ('Ich bin Keepfool.');}Die "Klasse" und der Konstruktor von JavaScript werden gleichzeitig definiert. Bei der Definition von "Klasse" in JavaScript wird der Konstruktor gleichzeitig definiert.
Konstruktoren verwenden
JavaScript verwendet Klassen wie C#mit dem neuen Schlüsselwort, gefolgt vom Konstruktor.
var p = neue Person ();
Definieren Sie Attribute und Methoden
Nachdem wir die Personklasse definiert haben, können wir der Personklasse einige Eigenschaften und Methoden hinzufügen.
Attribute definieren
Wenn wir über JavaScript -Objekte sprechen, sprechen wir über die Eigenschaftseinstellung und den Zugriff von Objekten.
Dieser Code zeigt zwei Möglichkeiten, Objekteigenschaften zu definieren:
var cat = {color: 'schwarz'}; cat.name = 'tom'; console.log (cat.color); console.log (cat.name);Verwenden Sie dies, um Attribute zu definieren
Die Attributdefinitionsmethode der JavaScript -Klasse ist etwas anders. Verwenden Sie dieses Schlüsselwort, um Attribute im Konstruktor zu definieren:
Funktionsperson (Name) {this.name = name;}• Die erste Codezeile definiert die Personklasse und definiert den Konstruktor.
• Die zweite Codezeile definiert das Namensattribut.
Objekte erstellen und verwenden
Die folgenden 2 Codezeilen erstellen zwei Personenklassenobjekte
var p1 = neue Person ('James'); var p2 = neue Person ('Cury');Ausgabe p1.name und p2.name in Chromkonsole
P1 und P2 sind zwei verschiedene Objekte, wobei die Änderung von p1.name P2.Name nicht beeinflusst.
p1.name = 'lebron james';
Definieren Sie die Methode
Lassen Sie uns zunächst die Begriffe "Funktion" und "Methode" unterscheiden. "Funktion" ist eine unabhängige Einheit, während "Methode" von der Existenz der Klasse als Subjekt abhängt.
Verwenden Sie dies, um Methoden zu definieren
In JavaScript soll die Klassenmethode die Funktion im Konstruktor definieren und dieses Schlüsselwort verwenden, um die Methode im Konstruktor zu definieren:
Funktion Person (Name) {// Definieren Sie das Attribut this.name = name; // Die Methode this.sayhello = function () {return 'Hallo, ich bin' + this.name;}}Wie man benutzt
Rufen Sie die Sayhello () -Methode von P1- und P2 -Objekten in der Chromkonsole an
Konstruktorattribut
Wenn ein Objekt erstellt wird, wird dem Objekt von JavaScript automatisch eine spezielle Eigenschaft zugeordnet, und diese Eigenschaft ist die Konstruktoreigenschaft.
Geben Sie p1.constructor in die Chromkonsole ein und Sie können sehen, dass die Konstruktoreigenschaft des P1 -Objekts auf eine Funktion zeigt.
Schauen Sie sich den Inhalt dieser Funktion an, ist dies nicht der Person () Konstruktor?
Dies bedeutet, dass wir auch Objekte über die Eigenschaft P1.Constructor erstellen können.
var p3 = neuer p1.constructor ('Steve Nash');Diese Codezeile erklärt einen Satz: "Es ist mir egal, wie das P1 -Objekt erstellt wird, aber ich möchte, dass ein anderes Objekt wie P1 erstellt wird!"
Wenn Sie den Instanzoperator in der Chromkonsole verwenden, können Sie sehen, dass P1, P2 und P3 alle Fälle der Personklasse sind
Wenn wir das Objekt auf {} erstellen, wird der Objekt () -Konstruktor tatsächlich aufgerufen.
var o = {};Diese Codezeile deklariert ein Objekt. Obwohl wir keine Eigenschaften und Methoden festlegen, legt die JavaScript -Engine das Konstruktorattribut standardmäßig fest.
o.constructor zeigt auf den Object () Constructor [native code] , dass Object () eine integrierte Funktion in JavaScript ist.
Prototypobjekt
In JavaScript hat die Funktion beim Definieren einer Funktion ein Prototypattribut, und der Konstruktor ist keine Ausnahme.
Die folgende Abbildung zeigt, dass die Prototyp -Eigenschaft des Person () () Konstruktors ein Objekt ist, das zur Funktion gehört , und wir nennen diese Eigenschaft ein Prototyp -Objekt.
Aus der Perspektive der Personklasse können wir auch verstehen, dass das Prototyp -Attribut zur Personklasse gehört.
Gleichzeitig hat die Instanz der Personklasse kein Prototypattribut. Der p1.Prototyp in der obigen Abbildung ist undefiniert, was bedeutet, dass das Prototyp -Attribut gemeinsam genutzt wird, was ein bisschen wie das statische Attribut in C#ähnelt.
Prototyp einstellen
Da Prototyp ein Objekt ist, können Sie ihm Eigenschaften und Methoden hinzufügen.
Das Definieren von Eigenschaften und Methoden in der Prototyp -Eigenschaft einer Funktion unterscheidet sich nicht von der Festlegung von Eigenschaften und Methoden gewöhnlicher Objekte.
Der folgende Code definiert Eigenschaften und Methoden für Person.Prototyp.
Funktionsperson (Name) {this.name = name; this.sayhello = function () {return 'Hallo, ich bin' + this.name;}} // Eigenschaften und Methoden auf dem Prototyp -Objektperson des Konstruktors des Konstruktors definieren. Person ('James');Mit Prototypen
Prototyp -Eigenschaften und -Methoden, die persönlich object.property sind.
Es ist zu beachten, dass name und sayHello() Instanzen der Personklasse sind, während height und run() Instanzen sind, die nicht zur Person der Person gehören.
Tipps: Sie können prüfen, ob das Objekt eine bestimmte Eigenschaft oder Methode über die Methode von HasownProperty enthält.
Prototypattribute
Eine Instanz der Personklasse kann sowohl Eigenschaften als auch Eigenschaften persönlich verwenden.
Was ist der Unterschied zwischen den Eigenschaften der Personklasse und den Eigenschaften der Person.
Erstens können wir die Eigenschaften und Methoden in der Personklasse als "Instanzeigenschaften" verstehen.
Da der Prototyp geteilt wird, können wir Eigenschaften und Methoden im Prototyp als "gemeinsame Eigenschaften" verstehen.
Der Unterschied zwischen "Instanzattributen" und "gemeinsam genutzten Attributen" spiegelt sich hauptsächlich in der Leistung wider.
Jedes Mal, wenn eine Personinstanz erstellt wird, wird eine Kopie des Namensattributs und die Methode Sayhello () generiert, und das Höhenattribut und die Run () -Methode teilen eine Kopie aller Instanzen.
Da dies der Fall ist, bedeutet dies, dass die Methode Sayhello () im Prototyp erwähnt werden kann.
Darüber hinaus kann die Höhe der unterschiedlichen Person unterschiedlich sein, daher sollte es vernünftiger sein, sie in die Personklasse zu setzen.
Funktionsperson (Name, Höhe) {this.name = name; this.height = height;} person.Prototype.sayhello = function () {return 'Hallo, ich bin' + this.name + ', meine Höhe ist' + thishththEght + 'cm.'; Person ('James', 203); var p2 = neue Person ('Cury', 190);Zusammenfassung der Klassenimplementierung
JavaScript hat keine Klassen, aber Konstruktoren können "Klassen" implementieren.
Gemäß JavaScript -Programmierspezifikationen sollte der erste Buchstaben des Konstruktors aktiviert werden.
Die Eigenschaften und Methoden der "Klasse" sind im Konstruktor in dieser Methode für die. Property definiert.
Wenn die Objekterstellung erstellt wird, weist JavaScript dem Objekt das Konstruktorattribut zu. Das Konstruktorattribut ist eine Referenz auf die Objektkonstruktorfunktion.
Die Funktion hat bereits ein Prototypattribut, wenn sie definiert ist, und das Prototyp -Attribut ist ebenfalls ein Objekt.
Der Prototyp wird gemeinsam genutzt, und Eigenschaften und Methoden, die am Prototyp definiert sind, können durch Instanzen der "Klasse" verwendet werden.
Wenn Eigenschaften oder Methoden am Prototyp definiert werden können, definieren Sie sie nicht auf Konstruktoren. Die Verwendung von Prototypen kann den Speicheraufwand reduzieren.
Der obige Artikel über JavaScript OOP - Details der Klassenimplementierung sind alle Inhalte, die ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.