jobo: pass by reference - verständnisproblem

Beitrag lesen

Hallo Cheatah,

merci.

Dass a ==== b ist leuchtet ein. Aber warum ändern die beiden folgenden Funktionen nicht den Wert von x???

weil Du nicht das referenzierte Objekt änderst, sondern einer lokalen Variable eine neue Referenz gibst.

Du meinst, o ist dann nicht mehr das Paramter-o aus der Funktion? Aber beim PHP-Beispiel ist doch genau das der Fall, oder? Zumindest, wenn ich den Referenzoperator zufüge (&).

setzt my_object.blah in dem Fall wohl auf die neue Var, weil das Objekt bzw. die Variable global ist?

Nein, weil Du ein Objekt änderst anstatt eine lokale Variable zu überschreiben. Ändere in Deiner funky()-Funktion mal o.irgendwas.

  
  
function funky2 (o) {  
	o.irgendwas = "irgendwas";  
}  
var x = {};  
funky2(x);  
alert(x.irgendwas); // "irgendwas"  
  

Äh, aber wie würde ich dann o eine neue Variable zuordnen? Oder im Beispiel, wie müsste swap aussehen, damit es wirklich swapped? (Bei PHP ginge das ja mit dem &-Operator, bei C vermutlich mit dem Pointerzeichen (*)).

  
function swap(a, b) {  
	var t = a;  
	a = b;  
	b = t  
}  

Bringts ja nicht, aber analog zu obigem Beispiel würde es gehen, wenn es Eingeschaften eines Objektes wären, oder?

  
function mySwap(obj, a,b) {  
	var t = obj[a];  
	obj[a] = obj[b];  
	obj[b] = t  
}  
var myObj = {  
	x : "objVal1",  
	y : "objVal2"  
}	  
mySwap(myObj,"x", "y");  
alert(myObj.x); //ojbVal2  

Dank und Gruß

jobo