Hallo Timothy!
soweit ich weiß erfolgt in JavaScript die Werteübergabe an eine Funktion als "Call by value" - richtig???
Meines Wissens ist das so richtig, und das gilt auch fuer Objekte.
Hier wird ein kleines, aber feines Detail wichtig: Ein Objekt in JavaScript ist eigentlich nicht das Objekt selbst, sondern nur eine Referenz auf ein Objekt. Wenn Du eine Variable hast, die ein Objekt beinhaltet, so ist der eigentliche Wert der Variable nur eine Referenz (Pointer) auf das wirkliche Objekt, dass irgendwo in den unendlichen Speicherweiten das JS-Interpreters rumhaengt.
Aeh ja - geht das auch auf Deutsch? Naja, Deutsch war das schon, aber sprechen wir doch einfach auf Code, die Sprache ist viel leichter! ;-)
Definieren wir uns also ein Objekttyp:
function Akte() {
this.X = 3;
}
und legen eine Instanz dieses Dings an:
x0 = new Akte();
x0 enthaelt jetzt die Referenz auf ein eben erzeugtes Objekt vom Typ Akte. Wir koennen jederzeit mit
alert(x0.X); // ergibt 3
auf die einzige Membervariable des Objekts zugreifen. Legen wir noch so ein Ding an und aendern den Wert in .X:
x1 = new Akte();
x1.X = 5;
alert(x1.X); // ergibt 5
alert(x0.X); // ergibt immer noch 3
Soweit, so gut. Weisen wir jetzt an x1 den Wert von x0 zu:
x1 = x0;
Es wurde jetzt die Referenz auf das erste Akte-Objekt kopiert, jetzt zeigen beide Variablen auf dasselbe Objekt. Es wurde NICHT das Objekt selbst kopiert, es gibt immernoch nur eines, das den Wert 3 in .X enthaelt. (Das andere Objekt, dessen .X == 5 war, ist bei diesem Vorgang uebrigens verlorengegangen, da die einzige Referenz auf dieses Objekt (in x1) ueberschrieben wurde.) Jetzt zeigen beide Variablen auf dasselbe Objekt:
alert(x0.X); // ergibt 3
alert(x1.X); // ergibt 3
Wenn ich jetzt ueber eine der Referenzen den Wert von .X in dem Objekt aendere, sehe ich das auch ueber die andere Referenz:
x1.X = 10;
alert(x0.X); // ergibt 10
alert(x1.X); // ergibt 10
Und jetzt wird der Effekt vielleicht klar: Du uebergibst nur eine Referenz auf das eine INPUT field (und diese Referenz wird durchaus by value uebergeben), und ueber diese Referenz-Kopie wird zugegriffen, wenn Du den Wert (.value) aenderst. Und auch die kopierte Referenz zeigt eben auf das eine INPUT.
Calocybe