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
Inhaltsverzeichnis 1. Inhaltsverzeichnis 1.1 Konz...
Ergebnisse erzielen Implementierungscode html <...
Vorwort Vor Kurzem habe ich begonnen, Robot Frame...
Inhaltsverzeichnis 2. Detaillierte Erklärung 2.1....
Das Standardspeicherverzeichnis von MySQL ist /va...
Wenn die erstellte Registerkartenbeschriftung den...
1. Hörer ansehen Vorstellung der Uhr importiere {...
Holen Sie sich die Anzahl der Verbindungen --- Ho...
Derzeit gibt es drei Möglichkeiten, die Mitte ein...
Heute habe ich mysql-5.7.18-winx64.zip von der of...
<br />Navigation bezieht sich nicht nur auf ...
Erstellen Sie eine ansprechende Anmelde- und Regi...
Verwenden Sie js, um den Lichtschalter zu Ihrer R...
Frage Die feste CSS-Positionierung position:fixed...
In diesem Artikel wird der spezifische Code von j...