Dieser Artikel analysiert die Verwendung der Vererbung der JavaScript -Prototyp -Kette. Teilen Sie es für Ihre Referenz. Die spezifische Analyse ist wie folgt:
Kopieren Sie den Code wie folgt: Funktionsform () {
this.name = 'form';
this.toString = function () {
kehre diesen namennamen zurück;
}
}
Funktion twodShape () {
this.name = '2D Form';
}
Funktion Dreieck (Seite, Höhe) {
this.name = 'Triangle';
this.side = Seite;
this.height = Höhe;
this.getArea = function () {
zurück this.side*this.height/2;
};
}
/* Nachlass */
TwodShape.Prototype = new Shape ();
Triangle.Prototype = new twodShape ();
Wenn wir die Prototyp -Eigenschaft des Objekts vollständig neu schreiben, hat es manchmal einen bestimmten negativen Einfluss auf die Konstruktoreigenschaft des Objekts.
Nachdem wir die relevante Erbschaftsbeziehungseinstellung abgeschlossen haben, ist es daher eine sehr gute Angewohnheit, die const -Attribute dieser Objekte entsprechend zurückzusetzen. Wie unten gezeigt:
Die Codekopie lautet wie folgt: twodShape.prototype.Constructor = twodShape;
Triangle.Prototype.Constructor = Triangle;
umschreiben:
Kopieren Sie den Code wie folgt: Funktionsform () {}
Shape.Prototype.Name = 'Form';
Shape.Prototype.toString = function () {
kehre diesen namennamen zurück;
}
Funktion twodShape () {}
TwodShape.Prototype = new Shape ();
TwodShape.Prototype.Constructor = twodShape;
TwodShape.Prototype.name = '2D -Form';
Funktion Dreieck (Seite, Höhe) {
this.side = Seite;
this.height = Höhe;
}
Triangle.Prototype = new twodShape;
Triangle.Prototype.Constructor = Triangle;
Triangle.Prototype.name = 'Triangle';
Triangle.Prototype.getArea = function () {
zurück this.side*this.height/2;
}
Schreiben Sie erneut um (Referenzpass statt Wertpass):
Kopieren Sie den Code wie folgt: Funktionsform () {}
Shape.Prototype.Name = 'Form';
Shape.Prototype.toString = function () {
kehre diesen namennamen zurück;
}
Funktion twodShape () {}
TwodShape.Prototype = form.prototype;
TwodShape.Prototype.Constructor = twodShape;
TwodShape.Prototype.name = '2D -Form';
Funktion Dreieck (Seite, Höhe) {
this.side = Seite;
this.height = Höhe;
}
Triangle.Prototype = twodShape.Prototype;
Triangle.Prototype.Constructor = Triangle;
Triangle.Prototype.name = 'Triangle';
Triangle.Prototype.getArea = function () {
zurück this.side*this.height/2;
}
Obwohl die Effizienz verbessert wird, hat eine solche Methode einen Nebeneffekt, da es sich um eine Referenzabgabe handelt, nicht als Wertschöpfung, sodass der Namenswert im "übergeordneten Objekt" betroffen ist.
Das untergeordnete Objekt und das übergeordnete Objekt verweisen auf dasselbe Objekt. Sobald das untergeordnete Objekt seinen Prototyp geändert hat, wird das übergeordnete Objekt auch sofort geändert.
Schreiben Sie erneut um (unter Verwendung von Temporary Constructor):
Kopieren Sie den Code wie folgt: Funktionsform () {}
Shape.Prototype.Name = 'Form';
Shape.Prototype.toString = function () {
kehre diesen namennamen zurück;
}
Funktion twodShape () {}
var f = function () {}
F.Prototype = form.prototype;
TwodShape.Prototype = new f ();
TwodShape.Prototype.Constructor = twodShape;
TwodShape.Prototype.name = '2D -Form';
Funktion Dreieck (Seite, Höhe) {
this.side = Seite;
this.height = Höhe;
}
F.Prototype = twodShape.Prototype;
Triangle.Prototype = new f ();
Triangle.Prototype.Constructor = Triangle;
Triangle.Prototype.name = 'Triangle';
Triangle.Prototype.getArea = function () {
zurück this.side*this.height/2;
}
Obwohl die Effizienz verbessert wird, hat eine solche Methode einen Nebeneffekt, da es sich um eine Referenzabgabe handelt, nicht als Wertschöpfung, sodass der Namenswert im "übergeordneten Objekt" betroffen ist.
Das untergeordnete Objekt und das übergeordnete Objekt verweisen auf dasselbe Objekt. Sobald das untergeordnete Objekt den Prototyp ausrichtet und ihn modifiziert, wird das übergeordnete Objekt auch sofort geändert.
Ich hoffe, dieser Artikel wird für JavaScript -Programme aller hilfreich sein.