Linuchs: JS: Wird Objekt kopiert oder Pointer gesetzt?

Moin,

wenn ich eine Variable kopiere und dann die Kopie bearbeite, lässt das die Variable vollkommen kalt. Aber wie ist es, wenn ich ein DOM-Objekt kopiere und die Kopie bearbeite?

Klartext: Ich weiss nicht, wann eine Kopie erzeugt und wann nur ein Pointer auf das Original gesetzt wird.

var obj;
function xyz( object ) {
  obj = object;
}

was befindet sich jetzt in der Variable obj?

In einer anderen Funktion möchte ich das gespeicherte DOM-Objekt ansprechen:

function abc() {
  obj.style.backgroundColor = "#ff0";
}

Darf ich erwarten, dass die Anzeige auf dem Display gelb hinterlegt wird oder wird die Hintergrund-Farbe einer Kopie irgendwo im Nirwana zugewiesen?

Linuchs

  1. Tach!

    wenn ich eine Variable kopiere und dann die Kopie bearbeite, lässt das die Variable vollkommen kalt.

    Eine Variable kann auch Objekte enthalten. Nicht die Variable ist das entscheidende, sondern der Typ ihres Inhalts. Wenn es ein skalarer Typ ist, also alles was kein Array oder Objekt ist, wird eine Kopie erstellt, ansonsten eine Referenz.

    Aber wie ist es, wenn ich ein DOM-Objekt kopiere und die Kopie bearbeite?

    Das ist ein Objekt und beim Zuweisen von einer Variable an eine andere wird eine neue Referenz auf dasselbe Objekt erstellt. Beide Variablen zeigen dann auf dasselbe Objekt. Ändern man an diesem Objekt etwas über die eine Variable, kann man die Änderungen über die andere Variable auch sehen.

    var obj;
    function xyz( object ) {
      obj = object;
    }
    

    was befindet sich jetzt in der Variable obj?

    Eine Referenz, wenn du die Funktion mit einem Objekt als Argument aufgerufen hast und eine Kopie, wenn es ein skalarer Wert war. (Schön ist aber etwas anderes als eine globale Variabel in einer Funktion zu ändern.)

    Darf ich erwarten, dass die Anzeige auf dem Display gelb hinterlegt wird oder wird die Hintergrund-Farbe einer Kopie irgendwo im Nirwana zugewiesen?

    Das kannst du nun hoffentlich selbst beantworten.

    dedlfix.

  2. Hallo und guten Tag Linuchs,

    wenn ich eine Variable kopiere und dann die Kopie bearbeite, lässt das die Variable vollkommen kalt. Aber wie ist es, wenn ich ein DOM-Objekt kopiere und die Kopie bearbeite?

    Um eine Kopie von einem DOM-Objekt zu machen, gibt es eine eigene Funktion:

    http://www.mediaevent.de/javascript/dom-clonenode-normalize.html

    Grüße
    TS

    --
    es wachse der Freifunk
    http://freifunk-oberharz.de