Hallo zusammen,
Gehe ich richtig in der Annahme, dass folgende Versuche quasi identisch sind:
function Kraftfahrzeug (Fabrikat) { this.Fabrikat = Fabrikat; }
Kraftfahrzeug.prototype.parent = Kraftfahrzeug;
function PKW (Fabrikat) { this.parent(Fabrikat); }
PKW.prototype = new Kraftfahrzeug();
var Golf = new PKW("Volkswagen Golf");
alert(Golf.Fabrikat);
und
function Kraftfahrzeug (Fabrikat) { this.Fabrikat = Fabrikat; }
function PKW (Fabrikat) { this.constructor(Fabrikat); }
PKW.prototype = new Kraftfahrzeug();
var Golf = new PKW("Volkswagen Golf");
alert(Golf.Fabrikat);
Die erste Version findet man öfters. Der Prototyp bekommt eine Referenz auf seinen eigenen Konstruktor als Eigenschaft, im Konstruktor des abgeleiteten Prototyps können dann die dem Konstruktor übergebenen Parameter zum Prototyp durchgereicht werden. So muss this.Fabrikat = Fabrikat und alle weiteren Initialisierungen nur im obersten Konstruktor stehen.
Dieser Umweg erscheint mir aber zu umständlich, wenn es möglich ist, genauso über this.constructor in der Prototype-Chain aufzusteigen. Das sollte sich über mehrere voneinander abstammende Prototypen fortsetzen lassen:
function Menschenartiger (Name) { this.Name = Name; }
function Menschenaffe (Name) { this.constructor(Name); }
Menschenaffe.prototype = new Menschenartiger();
function EchterMensch (Name) { this.constructor(Name); }
EchterMensch.prototype = new Menschenaffe();
function Mensch (Name) { this.constructor(Name); }
Mensch.prototype = new EchterMensch();
var molily = new Mensch("Mathias");
alert(molily.Name);
Kann man das so empfehlen, können die Browser das? Ich habe hier keinen MSIE zum Testen, aber schon Netscape 4 kann es, Opera ab 6 und Firefox 1.0 ebenfalls.
Ferne frage ich mich, ob das doppelte Aufrufen des Prototyp-Konstruktors (new EchterMensch() und this.constructor(Name)) einmal mit und einmal ohne Parameter in der Praxis bei komplexeren Anwendungen Probleme verursachen kann. Falls ja, müsste man tatsächlich das Setzen von Eigenschaften anhand der Parameter in jeder Konstruktorfunktion wiederholen. Ist das gängige Praxis?
Mathias