Hallo Siechfred,
Du schreibst:
---wird das Objekt ELTERN nur einmal vererbt, nämlich auf das Objekt KIND. Damit steht es mit seinen Eigenschaften
für alle KIND-Objekte genau einmal zur Verfügung. Änderst du eine vom Objekt ELTERN geerbte Eigenschaft, führt
das zu dem von dir beschriebenen Ergebnis.
Warum aber bleibt dann die Alter-Eigenschaft für jede KIND-Instanz individuell, wenn es nur "einmal zur Verfügung" steht?
function ELTERN (Objekte, Alter) {
this.Objekte = Objekte || ["leer"]; // da fehlte das Semicolon (für die, die es nachbauen wollen)
this.Alter = Alter || 30;
}function KIND (irgendwas){
this.irgendwas = irgendwas;
}KIND.prototype = new ELTERN;
Kind1 = new KIND;
Kind2 = new KIND;// hier ist der Knackpunkt: erst hier wird Objekte zum Array
Interessant. Immerhin funktioniert das. Obwohl es mir nicht schlüssig vorkommt. Denn Du könntest an dieser Stelle schon, vor den nachfolgenden Zuweisungen mit
alert(Kind1.Objekte[0]);
die Ausgabe "leer" erreichen, was dem default-Wert aus ELTERN entspricht. Also muß es schon ein Array sein.
Kind1.Objekte = new Array("Ball","Rassel");
Kind1.Alter = 5;
Kind2.Objekte = new Array("Nuckel","Kreisel");
Kind2.Alter = 10;alert("Kind1: "+Kind1.Objekte[0]+", "+Kind1.Objekte[1]+", "+Kind1.Alter+"\nKind2: "+Kind2.Objekte[0]+", "+Kind2.Objekte[1]+", "+Kind2.Alter);
Es bringt auch nichts, die Array-Definition in der ELTERN-Funktion unterzubringen. Das Problem ist genau das, was ich vermutet hatte, du erzeugst ein Array ELTERN.Objekte, auf das sämtliche KIND-Objekte Zugriff haben. Du willst aber vermutlich, dass jedes KIND ein eigenes Array ELTERN.Objekte bekommt.
Ich wollte eigentlich nur eine Eigenshaft haben, die allen "Unterklassen" gemeinsam ist. In meinem tatsächlichen Fall gibt es sozusagen "mehrere Generationen" und ich wollte mir die Neudefinition immer der gleichen Eigernschaften sparen, was auch geht, solange es eben keine Arrays sind. Im Grunde genommen machst Du genau das in Deinem Beispiel.
Ich denke, ich werde das auch so ähnlich tun, womit Du mir sehr geholfen hast.
Ehrlich gesagt denke ich jetzt, daß das beschriebene Verhalten ein Bug in JS ist.
Danke und schöne Festtage
Stefan