Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/02/2008, 13:27
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 3 meses
Puntos: 45
Re: variables por referencia

Hola:

También ocurre en los objetos, si no hacemos una copia explicita de todas sus propiedades las variables funcionan como el anterior ejemplo de Panino:

Código PHP:
function obj(x) {
    
this.x;
}

// Establecimiento
var foo = new obj(6);
var 
bar foo;
// Mostramos
alert("foo.x = "+foo.x);        // 6 como se espera
alert("bar.x = "+bar.x);        // 6 como se espera

// Cambio
bar.18;
// Mostramos
alert("foo.x = "+foo.x);        // 18 en vez de 6 ¡!
alert("bar.x = "+bar.x);        // 18 como se espera 
También ocurre exactamente igual con las variables que son funciones dentro de un objeto, al modificar una de un objeto, se modifican todas las de su copia:
Código PHP:
function obj(x) {
    
this.x;
    
this.cuadradoDeX = function() {
        
this.Math.pow(this.x2);
    }
}

// Establecimiento
var foo = new obj(6);
var 
bar foo;
// En este punto foo.x = bar.x, y además son la misma. También es lo mismo foo.cuadradoDeX que bar.cuadradoDeX
// Modifico, teoricamente sólo en bar
bar.cuadradoDeX = function() {
    
this.Math.pow(this.x3);
}
// En este punto es lo mismo foo.cuadradoDeX que bar.cuadradoDeX, las dos hacen el cubo, y las dos afectan a la misma x.

// ejecuto la modificada, pero afectará también a foo.
bar.cuadradoDeX();
// Mostramos
alert("foo.x = "+foo.x);        // 6^3=216, podríamos esperar 6^2 al no haber modificado foo.cuadradoDeX
alert("bar.x = "+bar.x);        // 6^3=216, como se espera 

Hay que tener un poquito de cuidado, pero se entiende rápido, sólo pasa en variables de Arrays o en Objets.


Saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.