Wir wissen, dass es in JS kein Konzept der Klasse gibt. Alle Instanzobjekte einer Klasse erben Attribute aus demselben Prototypobjekt, sodass das Prototyp -Objekt der Kern der Klasse ist.
Eine Klasse ist eine Abstraktion eines Objekts, und ein Objekt ist eine konkrete Instanz einer Klasse. Die Klassen sind abstrakt und belegen kein Gedächtnis, während Objekte konkret sind und den Speicherplatz belegen. --- Baidu Encyclopedia
Die frühen JavaScript-Anforderungen waren sehr einfach, im Grunde genommen als Funktionen geschrieben, gefolgt von prozessorientiertem Schreiben. Später wurden objektorientierte Entwicklungsideen allmählich eingeführt und dann langsam in Klassen geschrieben.
In JS ist die Essenz des Schreibens in eine Klasse im Grunde genommen Konstruktor + Prototyp. Lassen Sie uns im Folgenden verschiedene Möglichkeiten zum Schreiben von JS -Klasse erörtern:
Konstruktormethode
/*** Person Klasse: Definieren Sie eine Person mit Namensattribut und GetName -Methode*/<Script> Funktion Person (Name) {this.name = name; this.getName = function () {return this.name; }} // Wir instanziieren hier mehrere Objekte hier var p1 = new Person ("trigkit4"); var p2 = neue Person ("mike"); console.log (p1instanz der Person); // True Console.log (p2 Instance von Person); // True </script>Aus der obigen Konsolenausgabe können wir sehen, dass P1 und P2 tatsächlich Instanzobjekte der Personklasse sind. Auf der linken Seite des Instanz des Operators befindet sich das Objekt der zu erkennenden Klasse und auf der rechten Seite der Konstruktor der Klasse, der die Klasse definiert. Hier wird Instanz verwendet, um festzustellen, ob Objekt P1 zur Personklasse gehört.
Der Vorteil dieser Methode besteht darin, dass wir verschiedene Objektinstanzen gemäß den Parametern konstruieren können. Der Nachteil ist, dass jedes Mal, wenn wir das Instanzobjekt konstruieren, die GetName -Methode erzeugt wird, was zu Speicherabfällen führt.
Wir können eine externe Funktion anstelle von Klassenmethoden verwenden, damit jedes Objekt dieselbe Methode teilt. Die umgeschriebene Klasse lautet wie folgt:
// externe Funktion <Script> Funktion getName () {return this.name; } Funktionsperson (Name) {this.name = name; this.getName = getName; //} </script>Prototypmethode
<Script> Funktion person () {}; Person.Prototype.name = "trigkit4"; // Die Eigenschaften der Klasse werden auf dem Prototypenperson. } var p1 = new Person (); var p2 = new Person (); console.log (p1.name); // trigkit4 console.log (p2.getName ()); // Ich bin trigkit4 </script>Der Nachteil der Prototypmethode besteht darin, dass die Objektinstanz nicht durch Parameter konstruiert werden kann (im Allgemeinen sind die Eigenschaften jedes Objekts unterschiedlich). Der Vorteil besteht darin, dass alle Objektinstanzen die GetName -Methode (relativ zur Konstruktormethode) teilen und es keinen Speicherabfall gibt.
Konstruktor + Prototyp
Nehmen Sie die Vorteile der ersten beiden:
A. Verwenden Sie den Konstruktor, um Klassenattribute (Felder) zu definieren.
B. Verwenden Sie den Prototyp, um die Klassenmethode zu definieren.
<Script> Funktion Person (Name) {this.name = name; } // Die Prototyp -Funktion ermöglicht Objektinstanzen die GetName -Methode person.prototype.getName = function () {return "I. I." + this.name; } </script>Auf diese Weise können wir Objekte mit unterschiedlichen Attributen konstruieren und Objektinstanzen Methoden freigeben lassen, ohne Speicherabfälle zu verursachen.
Um den JS -Code kompakter zu machen, haben wir den Prototyp -Methodencode in die Klammern der Funktionsperson verschoben.
<Script> Funktion Person (Name) {this.name = name; Person.Prototype.getName = function () {return name; // this.name ist nicht geeignet}} var p1 = new Person ('trigkit4'); console.log (p1.getName ()); // trigkit4 </script>Hier müssen wir verschiedene Methoden zur Definition von Klassen kennen, zusätzlich zum obigen Konstruktor gibt es auch:
Object.Create () Methode
Mit dieser Methode ist eine "Klasse" ein Objekt, keine Funktion.
var person = {name: "trigkit4", Alter: 21, run: function () {alert ("Ich mag es zu rennen"); }}Verwenden Sie dann Object.create () direkt, um eine Instanz zu generieren, ohne neue zu verwenden.
var p1 = Object.create (Person); Alert (p1.age); // 21 p1.run (); // Ich mag es zu rennen
Diese Methode ist einfacher als die "Konstruktormethode", kann jedoch keine privaten Attribute und privaten Methoden implementieren, und Daten können nicht zwischen Instanzobjekten geteilt werden, sodass die Simulation von "Klassen" nicht umfassend genug ist.
createNew () Methode
Diese Methode erfordert dies nicht und Prototyp. Es wird Objekte verwendet, um eine Klasse zu simulieren, dann einen Konstruktor CreateNew () in der Klasse zu definieren und dann ein Instanzobjekt in CreateNew () zu definieren und dieses Instanzobjekt als Rückgabewert zu verwenden.
<Script> var person = {createNew: function () {var person = {}; Person.name = "trigkit4"; Person.run = function () {alert ("Ich mag es zu rennen"); }; Rückkehr Person; }} </script>Rufen Sie bei der Verwendung die Methode createNew () auf, um das Instanzobjekt zu erhalten.
var p1 = Person.createNew (); p1.run (); // Ich mag es zu rennen
Diese Schreibmethode ist der Schreibmethode von Objektliteralen tatsächlich sehr ähnlich, außer dass einer durch Komma getrennt wird und der andere durch Semikolon getrennt wird.
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.