Doofer Titel... aber naja. Ich hab folgendes Problem:
function A(a)
{
var a = a;
//...
}function B(a)
{
var a = a;this.tuwas = tuwas()
{
a = new A();
//a ausgeben
}
}function C(meinarray)
{
var meinA = new A(meinarray);this.tuwas2 = tuwas2()
{
var meinB = new B(meinA);
meinB.tuwas();
//Ausgabe von meinA
}
}
>
> Im Beispiel ist ungefähr das Kommandomuster umgesetzt.
> Zunächst wird ein Objekt von C erschaffen und kriegt ein Array übergeben....
Nein! Zunächst passiert erstmal gar nichts. Solange C nicht auzfgerufen wird, wird weder von C etwas erschaffen noch wird etwas übergeben.
Oder hast du mit deiner Aussage gemeint, daß ein Objekt C erschaffen wird?
Also mal angenommen, C wird aufgerufen und dabei auch wirklich ein Array an C übergeben:
> Zunächst wird ein Objekt von C erschaffen und kriegt ein Array übergeben, worauf C ein neues A kreiert.
Nein.
Es wird eine lokale Variable meinA erzeugt.
Diese ist nur in C erreichbar.
Es wird kein neues A kreiert sondern eine Instanz des bestehenden A erzeugt.
In der lokalen Variable meinA wird eine Referenz auf die erzeugte Instanz von A gespeichert.
> Dann wird von C die funktion tuwas2() aufgerufen.
Nein, wird Sie nicht.
Aber mal angenommen, Sie würde aufgerufen werden:
> Hier wird ein neues B erschaffen und das B kriegt das bereits bekannte A übergeben (als Referenz oder?).
Es wird eine Instanz von B erzeugt und eine Referenz auf die Instanz in der lokalen Variable meinB gespeichert.
Der Instanz von B wird eine Referenz auf die zuvor erzeugte Instanz von A übergeben.
> Nun wird vom B die Methode tuwas() aufgerufen, die das A quasi löscht bzw. halt ein neues A ohne Array erzeugt.
Beim Erzeugen der Instanz von B wurde in der lokalen Variable a eine Referenz auf meinA gespeichert (nicht schön, daß da alles a heißt).
Beim Aufruf von tuwas wird eine neue Instanz von A erzeugt und eine Referenz auf diese neue Instanz von A in a gespeichert.
Die zuerst (in C) erzeugte Instanz von A bleibt unverändert bestehen. Eine Referenz auf diese Instanz ist noch in meinA gespeichert (innerhalb von C).
> Wenn man nun aber nach diesem Aufruf das A ausgibt, dann ist es plötzlich das alte A! Es wird vom B nicht gelöscht, die Arraywerte sind erhalten geblieben. Wenn ich jedoch innerhalb von B das A nach dem Löschen ausgebe, dann ist das A gelöscht.
Du bekommst das angezeigt, was du anzeigen lässt.
>
> Wie kommt das?