Wenn wir über Objekte sprechen, können wir uns an Klassen, Objekte, Verpackungen, Vererbung und Polymorphismus vorstellen. In dem Buch "JavaScript Advanced Program Design" (People's Post and Telecommunications Press, Cao Li, Zhang Xin. Der englische Name ist: Professionelles JavaScript für Webentwickler) im Buch beschrieben. Schauen wir uns die verschiedenen in JavaScript definierten Methoden an.
1. Fabrikmethode
Erstellen Sie unsere eigene Klasse und Objekte in JavaScript, wir sollten meistern müssen.
Kopieren Sie den Code -Code wie folgt:
<script type = "text/javaScript">
//Definition
var ocar = new Object ();
ocar.color = "rot";
ocar.doors = 4;
ocar.showcolor = function () {
Alarm (this.color);
}
// Anruf
ocar.showcolor ();
</script>
Wir sind einfach zu verwenden OCAR -Objekte, aber wir erstellen mehrere Autoinstanzen. Wir können eine Funktion verwenden, um den oben genannten Code zu verkörpern, um zu implementieren:
Kopieren Sie den Code -Code wie folgt:
<script type = "text/javaScript">
//Definition
Funktion createCar () {
var ocar = new Object ();
ocar.color = "rot";
ocar.doors = 4;
ocar.showcolor = function () {
Alarm (this.color);
}
Return OCAR;
}
// Anruf
var ocar1 = createCar ();
var ocar2 = createCar ();
ocar1.color = "schwarz";
ocar1.showcolor ();
ocar2.showcolor ();
</script>
Übrigens sind die standardmäßigen Mitgliedsattribute des JavaScript -Objekts öffentlich. Auf diese Weise nennen wir es eine Fabrikmethode und haben Fabriken erstellt, die bestimmte Arten von Objekten erstellen und zurückgeben können.
Dies ist etwas interessant, aber im Objekt -orientierten Objekt ist die Methode zum Erstellen des Objekts:
Car Car = New Car ();
Die Verwendung neuer Keywords wurde tief in den Herzen der Menschen verwurzelt, sodass wir die obige Methode definieren, um sie zu definieren. . Schauen wir uns die Formdefinition des Konstruktors an.
2. Konstruktor
Diese Methode sieht ein bisschen wie eine Fabrikfunktion aus. Die spezifische Leistung ist wie folgt:
Kopieren Sie den Code -Code wie folgt:
<script type = "text/javaScript">
//Definition
Funktion Car (Farbe, Türen) {
this.color = color;
this.doors = Türen;
this.showcolor = function () {
Alarm (this.color);
};
}
// Anruf
var car1 = neues Auto ("rot", 4);
var car2 = neues Auto ("blau", 4);
car1.showcolor ();
car2.showcolor ();
</script>
Es sieht offensichtlich aus, es gibt Unterschiede. Es fühlt sich ein bisschen interessant an. Erstellen Sie ein Objekt in der Konstruktionsfunktion mit diesen Schlüsselwörtern und es ist sehr freundlich, Objekte mit dem neuen Computersymbol zu erstellen. Es gibt aber auch einige Probleme: Jedes Mal, wenn das neue Objekt erstellt wird, sind alle Attribute, einschließlich der Erstellung der Funktion, dh, dass mehrere Objekte völlig unabhängig sind. CAR1 -Objekt und CAR2 -Objekt sind beides. Dies ist der Vorteil der ursprünglichen Form.
3. Prototyp
Mit dem Prototyp -Attribut des Objekts können Sie den Prototyp sehen, von dem das neue Objekt abhängt. Die Methode lautet wie folgt:
Kopieren Sie den Code -Code wie folgt:
<script type = "text/javaScript">
//Definition
Fuktion car () {
};
Car.prototype.color = "rot";
Car.Prototype.doors = 4;
Car.Prototype.Drivers = New Array ("Tom", "Jerry");
Car.prototype.showcolor = function () {
Alarm (this.color);
}
// Anruf:
var car1 = new Car ();
var car2 = new Car ();
car1.showcolor ();
car2.showcolor ();
Alarm (CAR1.DRIVERS);
CAR1.DRIVERS.PUSH ("Stephen");
Alarm (CAR1.Drivers);
Alarm (Car2.Drivers);
// Sie können JSON verwenden, um die Definition des Prototyps zu vereinfachen:
Car.prototype =
{{{{
Farbe: "Rot",
Türen: 4,
Treiber: ["Tom", "Jerry", 'Safdad'],
showcolor: function () {
Alarm (this.color);
}
}
</script>
Zunächst gibt es den Konstruktor dieses Codes, es gibt keinen Code, und fügen Sie dann das Attribut des Objekts hinzu, um das Attribut des CAR -Objekts über das Prototyp -Attribut des Objekts zu definieren. Diese Methode ist sehr gut, aber das Problem ist, dass das Objekt von Auto auf den Array -Zeiger zeigt. CAR2 Auch gleichzeitig ist dies nicht erlaubt.
Gleichzeitig manifestiert sich das Problem auch im Prototyp, der keine Initialisierungsparameter mitbringen kann, wodurch der Konstruktor nicht normal initialisieren kann. Dies erfordert eine andere Möglichkeit, um zu lösen: Das ist der gemischte Konstruktor/Prototyp -Modus.
4. Gemischte Konstruktor/Prototypenmodus
Die Kombination von Konstruktor und Prototyp ist sehr bequem, um die Klasse zu definieren.
Kopieren Sie den Code -Code wie folgt:
<script type = "text/javaScript">
//Definition
Funktion Car (Farbe, Türen)
{{{{
this.color = color;
this.doors = Türen;
this.drivers = New Array ("Tom", "Jerry");
}
Car.prototype.showcolor = function () {
Alarm (this.color);
}
// Anruf:
var car1 = neues Auto ('rot', 4);
var car2 = neues Auto ('blau', 4);
car1.showcolor ();
car2.showcolor ();
Alarm (CAR1.DRIVERS);
CAR1.DRIVERS.PUSH ("Stephen");
Alarm (CAR1.Drivers);
Alarm (Car2.Drivers);
Alarm (CAR1 -Instanz des Autos);
</script>
Diese Methode soll das Attribut im Inneren definieren und den Prototyp verwenden, um es außen zu definieren. Das Problem der Lösung der dritten Methode.
Diese Methode sollte tatsächlich sehr freundlich sein, aber im Vergleich zu Javas Grammatik sollte es etwas Disharmonie geben, und es fühlt sich für C ++ an. Für J2EE F & E -Mitarbeiter ist diese Methode immer umständlich. Es ist immer eine freundliche Verpackung Es wird angenommen, dass es schwieriger ist. Das ist der dynamische Prototyp.
5. Dynamischer Prototyp
Für Entwickler, die es gewohnt sind, andere Sprachen zu verwenden, ist die Verwendung von gemischten Konstruktor/Prototypen nicht so harmonisch. Bei der Definition von Kategorien werden die meisten objektorientierten Sprachen doch visuell auf Attributen und Methoden verpackt. Betrachten Sie die folgende C#-Klasse:
Kopieren Sie den Code -Code wie folgt:
Klassenauto // Klasse
{{{{
public String color = "rot";
Öffentliche Int -Türen = 4;
public int mpg = 23;
öffentliches Auto (Stringfarbe, Int -Türen, int MPG) // Konstruktor
{{{{
this.color = color;
this.doors = Türen;
this.mpg = mpg;
}
öffentliche void showcolor () // Medhod
{{{{
Console.writeLine (this.color);
}
}
C#ist gut gepackt alle Attribute und Methoden der Autoklasse. Wenn Sie also diesen Code sehen, wissen Sie, welche Funktionen sie erreichen sollen, und es definiert die Informationen eines Objekts. Menschen, die den Konstruktor/den Prototyp gemischter Konstrukteure kritisieren, glauben, dass die Methode, Attribute im Speicher des Konstruktors zu finden, und die Methode, Methoden außerhalb davon zu finden, nicht logisch ist. Daher haben sie einen dynamischen Prototyp entwickelt, um einen freundlicheren Codierungsstil zu bieten.
Die grundlegende Idee der dynamischen Prototypmethode ist die gleiche wie der Konstruktor/Prototyp der gemischten Struktur, dh die Definition von Nicht -Funktionsattributen im Konstruktor, und das Funktionsattribut wird unter Verwendung des Prototyp -Attributs definiert. Der einzige Unterschied ist die Position der Objektmethode. Im Folgenden ist die Autokurs durch dynamischen Prototypen umgeschrieben:
Kopieren Sie den Code -Code wie folgt:
<script type = "text/javaScript">
//Definition
Fuktion car () {
this.color = "rot";
this.doors = 4;
this.drivers = New Array ("Tom", "Jerry");
ifof car._initialized == "undefined") {{{{{{
Car.prototype.showcolor = function () {
Alarm (this.color);
}
// ............
}
// letzte Definition
Car._initialized = true;
}
</script>
Bis zum Überprüfen des Typs von CAR._initialisierte Äquivalent gleich "undefiniert" hat sich dieser Konstruktor nicht geändert. Diese Codezeile ist der wichtigste Teil der dynamischen Prototypmethode. Wenn dieser Wert nicht definiert ist, definiert der Konstruktor die Objektmethode weiterhin per Prototyp und setzt das CAR._initialisiert auf true. Wenn dieser Wert definiert ist (wenn sein Wert wahr ist, wird der Wert des Typs von booleschen) nicht erstellt. Kurz gesagt, diese Methode verwendet das Logo (_initialisiert), um festzustellen, ob es dem Prototyp eine Methode gegeben hat. Diese Methode wird nur einmal erstellt und zugewiesen.
6 Hybridfabrikmethode
Diese Methode ist normalerweise eine Möglichkeit, die Art und Weise zu ändern, wenn die vorherige Methode nicht angewendet werden kann. Sein Zweck ist es, einen gefälschten Konstruktor zu erstellen und nur ein neues Beispiel eines anderen Objekts zurückzugeben. Dieser Code scheint der Fabrikfunktion sehr ähnlich zu sein:
Kopieren Sie den Code -Code wie folgt:
Fuktion car () {
var ompcar = new Object ();
Ionmpcar.color = "rot";
Ionmpcar.doors = 4;
Ionmpcar.mpg = 23;
ionmpcar.showcolor = function () {
Alarm (this.color);
}
Return otempcar;
}
Unter anderem von der klassischen Methode verwendet diese Methode den neuen Operator, um es wie eine echte Strukturfunktion aussehen zu lassen:
var ocar = new Car ();
Da der neue Bediener innerhalb des CAR () -Konstruktors bezeichnet wird, wird der zweite neue Bediener ignoriert (außerhalb des Konstruktors). Das im Konstruktor erstellte Objekt wird an die variable var zurückgegeben. Diese Methode hat die gleichen Probleme wie die klassischen Methoden der Objektmethode. Stark empfohlen: Sofern Sie nicht müssen (siehe Kapitel 15), vermeiden Sie diese Methode trotzdem.
Zusammenfassung: (Welche Methode wird verwendet)
Derzeit ist am weitesten verbreitet ein gemischter Konstruktor/Prototyp. Darüber hinaus sind auch dynamische Prototypen sehr beliebt und entsprechen der Funktionsfunktion/Prototyp in der Funktion. Sie können diese beiden Methoden verwenden. Verwenden Sie jedoch nicht den klassischen Konstruktor oder Prototyp, da dies den Code in das Problem einführt.
Kopieren Sie den Code -Code wie folgt:
// ps
// Statische Klasse (1: Funktion)
varCollection = new Function () {
var _carcollection = new Array ();
this.add = function (objcar) {
alert ('add');
}
this.get = function (carid) {
alarm ('Get');
}
}
// Statische Klasse (2: JSON)
var car = {
Farbe: 'Rot',
Türen: 4,
showcolor: function () {alert (this.color);}
}
Car.showcolor ();