1. Klasse Eine Klasse ist eine Vorlage zum Erstellen von Objekten. Die Methode zum Generieren von Objektinstanzen in Funktion Punkt(x, y) { dies.x = x; dies.y = y; } Punkt.prototype.toString = Funktion () { gibt '(' + dies.x + ', ' + dies.y + ')' zurück; }; var p = neuer Punkt(1, 1);
Wie folgt: Klasse Punkt { Konstruktor(x, y) { dies.x = x; dies.y = y; } zuString() { gibt '(' + dies.x + ', ' + dies.y + ')' zurück; } } Der Datentyp einer Klasse ist eine Funktion, die selbst ein Konstruktor ist, der auf eine Funktion zeigt: // ES5 Funktionsdeklaration function Point() { //... } // ES6-Klassendeklaration class Point { //.... Konstruktor() { } } Typ von Punkt // "Funktion" Punkt === Punkt.prototype.constructor // wahr Die in der Klasse definierten Methoden sind an Klasse Punkt { Konstruktor(x, y) { dies.x = x; dies.y = y; } zuString() { gibt '(' + dies.x + ', ' + dies.y + ')' zurück; } } Punkt.Prototyp = { //.... zuString() } var p = neuer Punkt(1, 1); p.toString() // (1,1) Eine weitere Möglichkeit zum Definieren einer Klasse besteht in einem Klassenausdruck. // Unbenannte/anonyme Klasse let Point = class { Konstruktor(x, y) { dies.x = x; dies.y = y; } }; Punkt.name // Punkt Es gibt einen wichtigen Unterschied zwischen Funktionsdeklarationen und Klassendeklarationen. Funktionsdeklarationen werden hochgestellt, Klassendeklarationen jedoch nicht. > let p = new Point(); // Es wird kein Fehler gemeldet, wenn hochgestuft wird> function Point() {} > > let p = neuer Punkt(); // Fehler, Referenzfehler > Klasse Punkt {} > 1.1 Konstruktor() Eine Klasse muss Klasse Punkt { } // Klasse Point automatisch hinzufügen { Konstruktor() {} } 1.2 Getter und Setter Wie in Klasse Benutzer { Konstruktor(Name) { dieser.name = Name; } Name abrufen() { gib diesen Namen zurück; } setze Name(Wert) { dieser.name = Wert; } } 1.3 diese Innerhalb einer Klassenmethode bezieht sich Klasse Benutzer { Konstruktor(Name) { dieser.name = Name; } Druckname(){ console.log('Name ist ' + dieser.name) } } const Benutzer = neuer Benutzer('Jack') user.printName() // Name ist Jack const { printName } = Benutzer; printName() // Fehler. Kann Eigenschaften von undefined nicht lesen (lies „Name“) Wenn Sie es ohne Fehler separat aufrufen möchten, besteht eine Möglichkeit darin Klasse Benutzer { Konstruktor(Name) { dieser.name = Name; dies.printName = dies.printName.bind(dies); } Druckname(){ console.log('Name ist ' + dieser.name) } } const Benutzer = neuer Benutzer('Jack') const { printName } = Benutzer; printName() // Name ist Jack
Darüber hinaus können Sie Pfeilfunktionen verwenden, da diese innerhalb einer Pfeilfunktion immer auf das Objekt verweisen, in dem sie definiert sind. Klasse Benutzer { Konstruktor(Name) { dieser.name = Name; } Druckname = () => { console.log('Name ist ' + dieser.name) } } const Benutzer = neuer Benutzer('Jack') const { printName } = Benutzer; printName() // Name ist Jack 1.4 Statische Eigenschaften Statische Eigenschaften beziehen sich auf die Eigenschaften der Klasse selbst und nicht auf die Eigenschaften, die für das Instanzobjekt Klasse Benutzer { } Benutzer.prop = 1; Benutzer.prop // 1 1.5 Statische MethodenSie können in einer Klasse statische Methoden definieren. Die Methode wird nicht an Objektinstanzen vererbt, sondern direkt durch die Klasse aufgerufen. Klasse Utils { statische Druckinfo() { diese.info(); } statische Info() { console.log('hallo'); } } Utils.printInfo() // hallo Was die Aufrufbereichsbeschränkungen von Methoden wie privat und öffentlich betrifft, bietet 2. Vererbung In Beim Vererben muss die Unterklasse die Klasse Point3D erweitert Point { Konstruktor(x, y, z) { super(x, y); // Rufe den Konstruktor (x, y) der übergeordneten Klasse auf dies.z = z; } zuString() { return super.toString() + ' ' + this.z ; // Rufe toString() der übergeordneten Klasse auf } } Die statischen Methoden der übergeordneten Klasse werden auch an die untergeordnete Klasse vererbt. Klasse Übergeordnet { statische Info() { console.log('Hallo Welt'); } } Klasse Kind erweitert Elternteil { } Child.info() // hallo Welt 2.1 Super-Schlüsselwort Die Klasse Elternteil {} Klasse Kind erweitert Elternteil { Konstruktor() { super(); } } Wenn in einer normalen Methode einer Unterklasse die Methode der übergeordneten Klasse über Klasse Übergeordnet { Konstruktor() { dies.x = 1; dies.y = 10 } printParent() { konsole.log(dies.y); } drucken() { konsole.log(dies.x); } } Klasse Kind erweitert Elternteil { Konstruktor() { super(); dies.x = 2; } M() { super.print(); } } sei c = neues Kind(); c.printParent() // 10 cm() // 2 2.2 _proto_ und Prototyp Wenn Sie zum ersten Mal
Im Folgenden sind einige integrierte Objekte mit Prototyp aufgeführt: Schauen Sie sich gemäß der obigen Beschreibung den folgenden Code an var obj = {} // entspricht var obj = new Object() // obj.__proto__ zeigt auf den Prototyp des Objektkonstruktors obj.__proto__ === Objekt.prototype // wahr // obj.toString ruft die von Object.prototype geerbte Methode auf obj.toString === obj.__proto__.toString // true // Array-Variable arr = [] arr.__proto__ === Array.prototype // wahr Bei Funktion Foo(){} var f = neues Foo(); f.__proto__ === Foo.prototype // wahr Foo.__proto__ === Funktion.prototyp // wahr 2.3 __proto__ in der Vererbung Als syntaktische Vereinfachung für Konstruktorfunktionen verfügen Klassen außerdem über
Klasse Übergeordnet { } Klasse Kind erweitert Elternteil { } Kind.__proto__ === Übergeordnetes Element // wahr Child.prototype.__proto__ === Parent.prototype // wahr 2.4 __proto__ in geerbten Instanzen Die Die Klasse Übergeordnet { } Klasse Kind erweitert Elternteil { } var p = neues übergeordnetes Element(); var c = neues Kind(); c.__proto__ === p.__proto__ // falsch c.__proto__ === Child.prototype // wahr c.__proto__.__proto__ === p.__proto__ // wahr 3. Zusammenfassung Dies ist das Ende dieses Artikels über Das könnte Sie auch interessieren:
|
<<: So verwenden Sie Docker zum Erstellen eines Redis-Master-Slaves
>>: Zusammenfassung der Wissenspunkte des Datenbankindex
Navicat meldet beim Verbinden mit der Datenbank d...
1. Verwenden Sie die Tastenkombination Strg + Ums...
1 Tomcat herunterladen und starten Gehen Sie auf ...
Heute stellt dieser Artikel Anfängern einige grun...
Dieser Artikel ist ein integrierter Artikel zum E...
1. Komplettlösung 1. Problemanalyse und -lokalisi...
Standardmäßig erfolgt das Lesen und Schreiben von...
Vorwort In MySQL ist die Abfrage mehrerer Tabelle...
Floating Ads sind eine sehr verbreitete Form der ...
Heute hat mich bei der Arbeit ein Freund, den ich ...
In diesem Artikel wird hauptsächlich die Methode ...
Inhaltsverzeichnis 1. Was ist ein Prototyp? 1.1 F...
Das Geschäftsszenario des Unternehmens erfordert ...
Inhaltsverzeichnis Umgebungsvorbereitung Start 1....
MySQL erstellt Benutzer und autorisiert und wider...