Funktion: Prototyp
Jeder Konstruktor verfügt über eine Eigenschaft namens Prototyp (Prototyp, die unten nicht mehr übersetzt wird, den ursprünglichen Text verwendet). Diese Eigenschaft ist sehr nützlich: Deklarieren Sie gemeinsame Variablen oder Funktionen für eine bestimmte Klasse.
Definition des Prototyps
Sie müssen keine explizit eine Prototyp -Eigenschaft deklarieren, da sie in jedem Konstruktor vorhanden ist. Sie können sich das folgende Beispiel ansehen:
Beispiel Pt1
Die Codekopie lautet wie folgt:
Funktionstest ()
{
}
alert (test.prototype); // Ausgabe "Objekt"
Fügen Sie den Prototypen Eigenschaften hinzu
Wie Sie oben sehen können, ist Prototyp ein Objekt, sodass Sie ihm Eigenschaften hinzufügen können. Das Attribut, das Sie dem Prototyp hinzufügen, wird zu einem gemeinsamen Attribut für das mit diesem Konstruktor erstellte Objekt.
Zum Beispiel habe ich unten einen Datentyp -Fisch und möchte, dass alle Fische folgende Eigenschaften haben: lebendig = "Wasser" und Preis = 20; Um dies zu erreichen, kann ich diese Eigenschaften zum Prototyp des Konstruktorfisches hinzufügen.
Beispiel Pt2
Die Codekopie lautet wie folgt:
Funktion Fisch (Name, Farbe)
{
this.name = name;
this.color = color;
}
Fish.prototype.livesin = "water";
Fish.Prototype.price = 20;
Als nächstes machen wir ein paar Fische:
Die Codekopie lautet wie folgt:
var fish1 = neuer Fisch ("Mackarel", "Grau");
var fish2 = neuer Fisch ("Goldfisch", "Orange");
var fish3 = neuer Fisch ("Lachs", "weiß");
Schauen wir uns an, welche Eigenschaften Fische sind:
Die Codekopie lautet wie folgt:
für (int i = 1; i <= 3; i ++)
{
var fish = eval_r ("fish"+i); // Ich bekomme nur den Zeiger auf diesen Fisch
alert (fish.name+","+fish.color+","+fish.livesin+","+fish.price);
}
Die Ausgabe sollte sein:
Die Codekopie lautet wie folgt:
"Mackarel, Grau, Wasser, 20"
"Goldfisch, Orange, Wasser, 20"
"Lachs, Weißwasser, 20"
Sie sehen, dass alle Fische zu Attributen und Preis führen, und wir deklarieren diese Attribute für jeden verschiedenen Fische nicht einmal ausdrücklich. Wenn ein Objekt erstellt wird, weist der Konstruktor dem internen Attribut des neuen Objekts __Proto__ seinen Attributprototyp zu. Dieses __Proto__ wird von diesem Objekt verwendet, um seine Eigenschaften zu finden.
Sie können auch Prototypen verwenden, um allen Objekten gemeinsame Funktionen hinzuzufügen. Dies hat einen Vorteil: Sie müssen diese Funktion nicht jedes Mal erstellen und initialisieren, wenn Sie ein Objekt konstruieren. Um dies zu erklären, schauen wir uns das Beispiel DT9 erneut an und schreiben Sie es mit Prototypen neu:
Verwenden Sie Prototypen, um Objekten Funktionen hinzuzufügen
Beispiel Pt3
Die Codekopie lautet wie folgt:
Funktionsangestellter (Name, Gehalt)
{
this.name = name;
this.Salary = Gehalt;
}
Mitarbeiter.Prototype.getSalary = Funktion getAlaryfunction ()
{
kehre dies. Salary;
}
Mitarbeiter.Prototype.AddSalary = Funktion addSalaryFunction (Addition)
{
this.Salary = this.Salary+Addition;
}
Wir können Objekte erstellen, wie wir es normalerweise tun:
Die Codekopie lautet wie folgt:
var boss1 = neuer Mitarbeiter ("Joan", 200000);
var boss2 = neuer Mitarbeiter ("Kim", 100000);
var boss3 = neuer Mitarbeiter ("Sam", 150000);
Und überprüfen Sie es:
Die Codekopie lautet wie folgt:
Alert (Boss1.getSalary ()); // Ausgabe 200000
Alert (Boss2.getSalary ()); // 100000 ausgeben
Alert (Boss3.getSalary ()); // 150000 ausgeben
Hier ist ein Diagramm, um zu veranschaulichen, wie Prototyp funktioniert. Jedes Instanz dieses Objekts (Boss1, Boss2, Boss3) verfügt über eine interne Eigenschaft namens __Proto__, die auf den Eigenschaftsprototyp seines Konstruktors (Mitarbeiter) hinweist. Wenn Sie GetSalary oder AddSalary ausführen, wird dieses Objekt diesen Code in seinem __Proto__ finden und ausführt. Beachten Sie Folgendes: Hier gibt es keine Kopie des Codes (vergleichen Sie ihn mit dem Beispiel DT8 -Diagramm).