Jonas D.: Primitives / Object Referenz

Angenehmen Nachmittag,

ich frage mich gerade, wie das denn nun genau mit Object Referenzen funktioniert:

ich habe ein Object Literal foo mit einer Eigenschaft bar. Diese Eigenschaft soll den boolean Wert einer Variable foobar beinhalten.

var foobar = false;
var foo = {
    bar : foobar
}

Nun habe ich eine Funktion, die bei einem Klick auf eine Input Checkbox aufgerufen wird:

function() {
    foobar = this.checked;
}

Nun kann ich ja verstehen, warum nach einem Klick foobar = true und foo.bar = false ist. Aber wie bekomme ich es hin, dass sich beide Werte mit einem Klick ändern? Ich habe auch schon was mit new Boolean() versucht... allerdings nicht besonders erfolgreich. Wär toll wenn mir jemand den „Trick“ verraten könnte.

Jonas

  1. Tach!

    ich frage mich gerade, wie das denn nun genau mit Object Referenzen funktioniert:

    Grundsätzlich: einfache Werte werden kopiert, Objekte referenziert.

    ich habe ein Object Literal foo mit einer Eigenschaft bar. Diese Eigenschaft soll den boolean Wert einer Variable foobar beinhalten.

    var foobar = false;
    var foo = {
        bar : foobar
    }
    

    foo.bar hat eine Kopie des Wertes von foobar bekommen. Was auch immer nun mit foobar passiert, es hat keine Auswirkungen auf foo.bar. Die Kopien sind sozusagen selbständig.

    Aber wie bekomme ich es hin, dass sich beide Werte mit einem Klick ändern?

    Du brauchst eine Referenz. Die bekommst du aber nicht auf einfache Typen. Du kannst dir nur ein Container-Objekt bauen. In dem steckt dein boolscher Wert als Eigenschaft. Wenn du nun den Container weitergibst, wird eine neue Referenz erzeugt, die auf daselbe Container-Objekt zeigt. Du musst dann aber auch immer in den Container greifen, um den Wert zu bekommen.

    dedlfix.