Foros del Web » Programando para Internet » Javascript »

Javascript paso por referencia

Estas en el tema de Javascript paso por referencia en el foro de Javascript en Foros del Web. Hola que tal, yo tenia entendido que en javascript no existía el paso por referencia, sin embargo tengo esto. function(param){ var valu = param.value; valu ...
  #1 (permalink)  
Antiguo 26/07/2013, 20:17
 
Fecha de Ingreso: abril-2008
Mensajes: 316
Antigüedad: 16 años
Puntos: 3
Javascript paso por referencia

Hola que tal, yo tenia entendido que en javascript no existía el paso por referencia, sin embargo tengo esto.

function(param){
var valu = param.value;


valu += 5;
}


cuando quiero utilizar la variable valu, si valor esta incrementado, correcto, pero cuando quiero utilizar param.value, su valor es el mismo que el de valu, yo entiendo a esto como paso por referencia si fuera por valor tendria una copia de valu = 5+valor original y param.value = valor original enviado por el usuario.

Entonces a que se debe que el valor de mi parametro original cambie??
  #2 (permalink)  
Antiguo 26/07/2013, 20:50
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Javascript paso por referencia

buenas...
en javascript no puedes controlar que datos pasar por referencia o por copia pero hay una regla bien básica sobre el método de copia. si el valor es primitivo (número, string, boolean, undefined, null), se hace una copia por valor (copy by value). si es un objeto (array, object, function), se hace una copia de la referencia. tienes que determinar que tipo de valor exactamente es la propiedad value. para determinarlo, puedes usar console.log(typeof param.value);. si no imprime cualquiera de los tipos primitivos, entonces debe haber algo adicional que está modificando su valor.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 26/07/2013 a las 21:03 Razón: error redacción
  #3 (permalink)  
Antiguo 29/07/2013, 09:21
 
Fecha de Ingreso: abril-2008
Mensajes: 316
Antigüedad: 16 años
Puntos: 3
Respuesta: Javascript paso por referencia

Hooo, pues mi param.value es un object json, y efectivamente le aplico una suma a algunos de sus valores, mi codigo es asi.


var origin = {"X":7,"Y":5},
origin2 = origin;

Mi idea es mantener una copia de origin intecta pero modificando origin 2 tambien cambiar los valores de origin, hay algo que pueda hacer para evitar esto por que lo solucione como dices usando los datos primitivos pero preferiria mantener una copia de mi origin como json.
  #4 (permalink)  
Antiguo 29/07/2013, 18:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Javascript paso por referencia

efectivamente estas pasando por referencia ya que el json es un objeto que, traducido a javascript, es un objeto normal y corriente. no he visto muy bien cuales son las alternativas nativas en el último estandar ECMAScript pero quizas la mejor alternativa es serializar el objeto en json y luego transformarlo (parse) a objeto.

Código:
// json es el objeto javascript, en tu caso param.value ;
var json_string = JSON.stringify(json);
var copy = JSON.parse(json_string);
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: paso, referencia, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:40.