In JavaScript kann die Klasse verwendet werden, um objektorientierte Programmierung zu implementieren. Die Klassen in JavaScript unterscheiden sich jedoch von denen in Java, und ihre entsprechenden Definitionen und Verwendungen sind ebenfalls unterschiedlich.
Definition von Klassen in JavaScript
In JavaScript bilden alle Objekte, die aus demselben Prototypobjekt (Prototyp) abgeleitet sind, eine Klasse; Das heißt, Klassen in JavaScript sind Konzepte einer Objektsammlung. Wenn zwei Objekte denselben Prototyp haben, gehören sie zur gleichen Klasse; Klassen in JavaScript benötigen nicht einmal Klassennamen. Der folgende Code ist ein Beispiel:
Die Codekopie lautet wie folgt:
var p = {x: 42};
var a = Object.create (p);
var b = Object.create (p);
console.log (a === b); // false
console.log (Object.getPrototypeof (a) === Object.getPrototypeof (b)); // true
Im obigen Beispiel haben Objekte A und B das gleiche Prototypobjekt (Prototyp) P, so dass A und B zur gleichen Klasse gehören (obwohl keiner dieser Klasse einen Klassennamen hat), und sie erben die Eigenschaft X mit einem Wert von 42 aus dem Prototyp -Objekt p.
Aus diesem Beispiel können wir erkennen, dass die Funktion eines Prototyp -Objekts einer Vorlage entspricht und mehrere Objekte daraus abgeleitet/erstellt werden können. Sein Status ist der gleiche wie der des Klassencode in der Java -Sprache und der Kern der Klassendefinition in JavaScript. Das Prototyp -Objekt im folgenden Beispiel wird eher wie der Klassencode angezeigt:
Die Codekopie lautet wie folgt:
var p = {
Increment_by: 1,,
Inkrement: Funktion (x) {
return x + this.increment_by;
}
}
var a = Object.create (p);
var b = Object.create (p);
Konsole.log (A.increment (7)); // 8
console.log (b.increment (9)); // 10
Im obigen Beispiel definiert das Prototyp -Objekt P eine Eigenschaft (increment_by) mit einem Wert von 1 und einer Funktion namens Increment; Die Objekte A und B erhalten die Funktionen in Increment_By und Increments aus der Vorlage p. Bei Aufrufen der Inkrementfunktion von Objekt A oder B versucht JavaScript, den Wert increment_by von a oder b zu erhalten (this.increment_by); Da Increment_By aus P erhalten wird, sind seine Werte alle 1 - Variablen mit denselben Werten, ähnlich wie bei statischen Klassenvariablen in Java. Daher werden im obigen Beispiel alle Kapitalzeichen verwendet, wenn die Variable increment_by benennt.
Im obigen Beispiel haben alle aus der Vorlage P erstellten Objekte (die zur gleichen Klasse gehörenden Objekte) die gleichen Eigenschaften und das gleiche Verhalten. Tatsächlich haben sie für verschiedene Objekte derselben Klasse, zusätzlich zu den von der Klasse definierten Attributen/Verhaltensweisen, häufig einige einzigartige Attribute und Verhaltensweisen. Wenn Sie die Prototyp -Vorlage als Klasse verwenden müssen, müssen Sie jedes daraus abgeleitete Objekt anpassen:
Die Codekopie lautet wie folgt:
var p = {
Increment_by: 1,,
Inkrement: Funktion (x) {
return x + this.increment_by + this.custom_increment_by;
}
}
var a = Object.create (p);
var b = Object.create (p);
a.custom_increment_by = 0;
b.custom_increment_by = 1;
Konsole.log (A.increment (7)); // 8
console.log (b.increment (9)); // 11
In diesem Beispiel haben Objekte A und B aus der Vorlage P eine variable custom_increment_by, deren Werte nicht unbedingt gleich sind, und das Endergebnis ihres Funktionsverhaltens in Increment () hängt mit dem Wert von Custom_increment_by zusammen. Im Allgemeinen wird die Arbeit des Anpassens neuer Objekte häufig in einer einheitlichen Funktion durchgeführt:
Die Codekopie lautet wie folgt:
var p = {
Increment_by: 1,,
Inkrement: Funktion (x) {
return x + this.increment_by + this.custom_increment_by;
}
}
Funktion getIncrementalClassObject (CustomincrementByValue) {
var incrementalobj = Object.create (p);
incrementalobj.custom_increment_by = CustomIncrementByValue;
return incrementalobj;
}
var a = getIncrementalClassObject (0);
var b = getIncrementalClassObject (1);
Konsole.log (A.increment (7)); // 8
console.log (b.increment (9)); // 11
Auf diese Weise wird eine Klassendefinition durch das Prototyp -Objekt P und GetIncrementalClassObject () -Funktionen abgeschlossen: Die Prototyp -Objekte, deren Prototyp -Objekte P werden, können erhalten werden, indem die GetIncrementalClassObject () -Funktion () Funktion aufgerufen werden, und diese neuen Objekte können während des Aufrufs während des Aufrufs zur GetIncrementalClassAbject () -Funktion () () -Funktion () ()) ()) Funktion ()). Es ist erwähnenswert, dass diese definierte Klasse derzeit keinen Klassennamen hat. Aus Gründen der Beschreibung wird es als inkrementell bezeichnet.
Wenn Sie auf die in der Funktion getIncrementalclassObject () geleisteten Arbeiten zurückblicken, können Sie feststellen, dass der Prozess des Erstellens eines neuen Objekts aus der inkrementellen Klasse wie folgt lautet:
1. Erstellen Sie ein leeres Objekt und definieren Sie sein Prototypobjekt als p.
2. Passen Sie dieses neu erstellte leere Objekt anhand verschiedener Parameterwerte an.
3. zurück ein neues Objekt, das angepasst wurde.
In JavaScript können Sie die Definition der Klasse und die Erstellung neuer Objekte mithilfe des Konstruktors schnell abschließen.
Konstruktor (Konstruktor) in JavaScript
Aus dem Beispiel der obigen inkrementellen Klasse können wir sehen, dass das Definieren einer neuen Klasse zwei Teile des Codes erfordert: Erstellen eines Prototypenobjekts als Vorlage, Erstellen einer benutzerdefinierten Funktion zum Initialisieren des neuen Objekts; Das Erstellen eines neuen Objekts aus einer Klasse durchläuft drei Prozesse: Geben Sie das Prototypobjekt des neuen Objekts an, Anpassen/Initialisierung des neuen Objekts und Rückgabe dieses neuen Objekts. In JavaScript kann all dies über den Konstruktor (Konstruktor) erfolgen.
Der Konstruktor in JavaScript ist eine Funktion, die die Verantwortung für die Initialisierung eines neuen Objekts übernimmt. Der Prototyp dieser Konstruktorfunktion wird als Vorlage zum Erstellen eines neuen Objekts verwendet. Wenn Sie die obige inkrementelle Klasse als Beispiel nehmen, sieht es nach dem Umschreiben des Codes nach dem Umschreiben von Konstruktoren aus:
Die Codekopie lautet wie folgt:
Funktion inkrementell (CustomincrementByValue) {
this.custom_increment_by = CustomIncrementByValue;
}
Incremental.Prototype = {
Increment_by: 1,,
Inkrement: Funktion (x) {
return x + this.increment_by + this.custom_increment_by;
}
}
var a = neu inkremental (0);
var b = neuer inkremental (1);
Konsole.log (A.increment (7)); // 8
console.log (b.increment (9)); // 11
Der Prozess des Erstellens eines neuen Objekts mithilfe der Konstruktorfunktion über das neue Schlüsselwort durchläuft tatsächlich die folgenden Phasen:
Erstellen Sie ein neues leeres Objekt.
1. Zeigen Sie das Prototypobjekt dieses Objekts auf die Prototyp -Eigenschaft der Konstruktorfunktion.
2. Verwenden Sie dieses Objekt als diesen Parameter und führen Sie die Konstruktorfunktion aus.
3. Dies ist dasselbe wie die vorherigen Arbeiten in der Funktion getIncrementalClassObject ().
Klassenname
Beim Erstellen eines Objekts mit dem Konstruktor verfügt das entsprechende Objekt über einen "Klassennamen", der aus dem Ergebnis des Instanzoperators überprüft werden kann:
Die Codekopie lautet wie folgt:
console.log (eine Instanz inkrementell); // true
console.log (b Instanz inkrementell); // true
Der Instanzoperator bestimmt jedoch nicht, ob das Objekt vom inkrementellen Konstruktor erstellt wird. Der Instanzoperator bestimmt nur, ob das Prototyp -Objekt des Objekts inkrementell ist. Wenn es zwei Konstruktoren mit demselben Prototyp gibt, kehrt der Instanzoperator einheitlich einheitlich zurück, ohne zu unterscheiden, welcher Konstruktor zum Erstellen des Objekts verwendet wird.
Die Codekopie lautet wie folgt:
Funktion incremental2 (CustominCrementByValue) {
this.custom_increment_by = CustomIncrementByValue + 3;
}
Incremental2.Prototype = incremental.Prototype;
console.log (ein Instanz von Incremental2); // true