Vererbung (prototype-Eigenschaft)
Jedes Function -Objekt verfügt über eine prototype -Eigenschaft. Diese ist von besonderer Bedeutung, wenn die Funktion genutzt wird, um neue Objekte zu initialisieren (siehe Konstruktor). Die prototype -Eigenschaft definiert in diesem Falle gemeinsame Eigenschaften aller Objekte, die mit dem Konstruktor erstellt werden. Man spricht von Prototyp-basierter Vererbung. Auf diese Weise ermöglicht JavaScript mehrstufige Vererbung:
Konstruktor eines Prototyps erstellen: function Kraftfahrzeug (Fabrikat) {
this.Fabrikat = Fabrikat;
this.Beispieleigenschaft = "Beispielwert";
}
Konstruktor des abgeleiteten Prototyps erstellen: function PKW (Fabrikat) {
this.constructor(Fabrikat);
this.weitereEigenschaft = "Beispielwert";
}
PKW.prototype = new Kraftfahrzeug();
Eine neue Instanz des allgemeinen Prototyps dient als Muster des abgeleiteten Prototyps. Dadurch werden die Eigenschaften des allgemeinen Prototyps an den abgeleiteten Prototyp vererbt: Jedes PKW-Objekt ist gleichzeitig ein Kraftfahrzeug-Objekt. Über this.constructor kann im PKW-Konstruktor der Kraftfahrzeug-Konstruktor angesprochen werden. Dies wird im Beispiel dazu genutzt, die Parameter an letztgenannten weiterzugeben. So muss this.Fabrikat = Fabrikat; nur im Kraftfahrzeug-Konstruktor notiert sein.
Instanz des Prototyps PKW erstellen: var Golf = new PKW("Volkswagen Golf");
var Ente = new PKW("Citroen 2CV");
Über die prototype -Eigenschaft der Konstruktorfunktion können einem Prototyp auch nachträglich Eigenschaften und Methoden hinzugefügt werden. Diese Änderungen wirken sich auf alle davon abgeleiteten Objekte aus: PKW.prototype.Radanzahl = 4;
PKW.prototype.zeigeRadanzahl = function () {
window.alert(this.Name + " hat " + this.Radanzahl + " Räder.");
};
Golf.zeigeRadanzahl(); // Volkswagen Golf hat 4 Räder.
Ente.zeigeRadanzahl(); // Citroen 2CV hat 4 Räder.
Eine nützliche Methode des Object -Prototyps ist hasOwnProperty(Eigenschaftsname) . Sie gibt einen booleschen Wert, also true oder false zurück. Dadurch lässt sich ermitteln, ob eine bestimmte Eigenschaft durch dessen Konstruktor selbst oder durch seine Prototyp-Kette definiert wird. Im Beispiel ergibt Golf.hasOwnProperty("Radanzahl") false , ebenso wie Golf.hasOwnProperty("zeigeRadanzahl") . Beide Eigenschaften wurden nachträglich über PKW.prototype hinzugefügt. Golf.hasOwnProperty("Fabrikat") und Golf.hasOwnProperty("weitereEigenschaft") hingegen ergeben true , weil diese Eigenschaften durch die Konstruktoren Kraftfahrzeug und PKW belegt wurden.
Quelle: www.wikipedia.org
|