Comunidad de diseño web y desarrollo en internet online

Duda con Objetos de js

Citar            
MensajeEscrito el 27 May 2011 01:20 am
hola gente, que tal?


Bueno estaba programando una cosita y me estanque en algo con programacion a objetos.

por ejemplo utilizando json:

var persona = {

nombre: "",
apellido: "",
dni: "",

}

var yoel = persona;
yoel.nombre = "yoel";
yoel.apellido = "yoelooo";


var juan = persona;

juan.nombre = "juan";
juan.apellido = "gomez";


alert(yoel.nombre);
alert(juan.nombre);



Si hago esto... me hereda todas las propieadades de juan osea que en el navegador apareceria:

la primera ventana mostrando "juan", y la segunda tambien mostrando "juan",

Alguna solucion gente?

Por yoelotero

51 de clabLevel



Genero:Masculino  

Programador web.

chrome
Citar            
MensajeEscrito el 27 May 2011 12:59 pm
Eh... no. Lo que estás haciendo no es trabajar con objectos sino con registros en memoria.

"persona" es un registro inicializado. Cuando haces:

Código Javascript :

var yoel = persona;

Estás creando un puntero al registro persona.
Y cuando haces:

Código Javascript :

var juan = persona;

Estás creando otro puntero que apunta al mismo registro que "yoel".
Por eso cuando cambias los valores de los campos de "persona" usando el puntero "yoel", en "juan" se verán reflejados esos cambios y viceversa.

Creo que lo que has querido hacer es esto:

Código Javascript :

function persona() {

 nombre= "",
 apellido= "",
 dni= "";

}

var yoel = new persona();
yoel.nombre = "yoel";
yoel.apellido = "yoelooo";


var juan = new persona();

juan.nombre = "juan";
juan.apellido = "gomez";


alert(yoel.nombre);
alert(juan.nombre);

Ahora sí, "persona" es una clase de objeto. Y cuando se hace:

Código Javascript :

var yoel = new persona();

Se está instanciando un objeto de la clase "persona" y cuando se hace:

Código Javascript :

var juan = new persona();

Es otro objeto diferente de la misma clase.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 May 2011 02:09 pm
siiiiiiiiiiiiiiiiiiiiiiiii, graciassssssssssssssssssssssssssssssssssss!

Por yoelotero

51 de clabLevel



Genero:Masculino  

Programador web.

chrome
Citar            
MensajeEscrito el 27 May 2011 02:10 pm
Lo que hice antes es como establecer un prototype? parece similar

Por yoelotero

51 de clabLevel



Genero:Masculino  

Programador web.

chrome
Citar            
MensajeEscrito el 27 May 2011 05:01 pm
¿Similar?, puede ser...

Me voy a permitir ponerme un poco didáctico.

Haz de cuenta que la memoria de la computadora es un barrio residencial.
En tu código original "persona" es una casa dentro del barrio siendo el identificador "persona" la dirección de esa casa.
Cuando le asignas "persona" a "yoel" es como si le dijeras al cartero "yoel" que vaya a esa casa. Y luego a "juan", otro cartero, que vaya a la misma casa.

En mi código "persona" no es una casa, es el plano de una casa.
Cuando haces var

Código :

var yoel = new persona();
le estás diciendo a "yoel" que construya una casa nueva siguiendo el plano de la casa "persona". O sea, metafóricamente "yoel" es el albañil y dueño de una casa que sigue el plano "persona".
Cuando haces lo mismo con "juan", estás diciendo que "juan" construya otra casa y se haga el dueño de ella.
Aunque "yoel" y "juan" construyeron sus casas con el mismo plano, viven en diferentes casas.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 May 2011 10:42 pm
claro, entiendo.

La verdad te pasaste DriverOp. Te agradezco muchisimo.

Un saludo!

Por yoelotero

51 de clabLevel



Genero:Masculino  

Programador web.

chrome
Citar            
MensajeEscrito el 28 May 2011 02:59 am
En la funcion constructora te falto el this.

Código :

function persona() { 
  this.nombre= "", 
  this.apellido= "", 
  this.dni= "";
}


Sin el this, solo estas declarando variables, mas no propiedades.

Yo haria algo como esto

Código :

var Persona = function(nombre, apellido, dni) {
 this.nombre = nombre;
 this.apellido = apellido;
 this.dni = dni;
}

var jp = new Persona('Joan', 'Piedra', 1337);
console.log(jp);

Por NEO_JP

BOFH

5724 de clabLevel

13 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Premio_Secretos Team Cristalab

Front-end Developer en Washington, DC

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.