peterS.: Objekt-Referenzen

Beitrag lesen

hallo again ChrisB,

„Zeigerverhalten“ würde ich mit Übergabe by reference gleichsetzen.

richtig.

Wenn wirklich by reference übergeben würde, dann müsste das Überschreiben
innerhalb der Funktion sich auch außerhalb auswirken, und dort den Wert
des Objektes ändern. ...

keineswegs, das Überschreiben einer Variable hat genau keinen Einfluß auf
diejenige Referenz, die vorher auf dieser Variable abgebildet war, es sei
denn, diese Variable wäre die zuletzt referenzierende gewesen, und nur dann
wäre das referenzierte Objekt verloren.

var x = y = z = obj = new String("obj");  
alert(x); // "obj"  
alert(y); // "obj"  
alert(z); // "obj"  
  
alert(x.anhang); // [undefined]  
alert(y.anhang); // [undefined]  
alert(z.anhang); // [undefined]  
  
obj.anhang = "anhang";  
delete obj;  
alert(typeof obj); // "undefined"  
  
alert(x.anhang); // "anhang" - referenziert immmer noch [obj]  
alert(y.anhang); // "anhang" - referenziert immmer noch [obj]  
alert(z.anhang); // "anhang" - referenziert immmer noch [obj]  
  
x = "x";  
  
alert(x); // "x"  
alert(y); // "obj"  
alert(z); // "obj"  
  
y = "y";  
  
alert(x); // "x"  
alert(y); // "y"  
alert(z); // "obj" - letzte Referenz des urspünglichen [obj]  
  
z = "z";  
alert(z); // "z" - »nu is schluss«

... Das passiert aber nicht.

zum Glück ...

... abgesehen davon gilt für Dein Bsp. wie nicht anders zu erwarten:

function x(s) {  
  if (obj && ((typeof obj == "object") || (typeof obj == "function"))) {  
    s.anhang = "anhang";  
    alert(s.anhang); // "anhang"  
  }  
}  
obj = Object("obj");  
alert(obj.anhang); // [undefined]  
  
x(obj); // "anhang"  
  
alert(obj.anhang); // "anhang"

so long - peterS. - pseliger@gmx.net

--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]