Foros del Web » Programando para Internet » Javascript »

Copiar objeto clase

Estas en el tema de Copiar objeto clase en el foro de Javascript en Foros del Web. Tengo un problema, y no sé como solucionarlo. Quiero copiar el contenido de una clase, llena de propiedades y quizá arrays en otra, para modificar ...
  #1 (permalink)  
Antiguo 14/10/2003, 03:10
 
Fecha de Ingreso: octubre-2003
Mensajes: 7
Antigüedad: 20 años, 6 meses
Puntos: 0
Copiar objeto clase

Tengo un problema, y no sé como solucionarlo. Quiero copiar el contenido de una clase, llena de propiedades y quizá arrays en otra, para modificar está última y luego poder comparar los cambios.

He intentado todo lo que se me ha ocurrido y leido, pero no consigo lo que quiero. Se copian por referencia y al modificar la segunda clase se modifica la primera.

El último código que tengo es este:

<script language="JavaScript">
function cPagina(name){
this.Name = name
this.Objeto = new Array();
}
function cPagina2(objeto){
this.Cont = objeto;
}
function cObjeto(valor){
this.Valor = valor;
}
var Pagina = new cPagina('Tabla1');
Pagina.Objeto[0] = new cObjeto('Valor1');
Pagina.Objeto[1] = new cObjeto('Valor2');
Pagina.Objeto[2] = new cObjeto('Valor3');
Pagina.Objeto[3] = new cObjeto('Valor4');
Pagina.Objeto[4] = new cObjeto('Valor5');
Pagina.Objeto[5] = new cObjeto('Valor6');
Pagina.Objeto[6] = new cObjeto('Valor7');
Pagina.Objeto[7] = new cObjeto('Valor8');
Pagina.Objeto[8] = new cObjeto('Valor9');
Pagina.Objeto[9] = new cObjeto('Valor10');

function datos_cargar(){
var intI;
var tabla;
var fila;
var celda;
var Pagina2;

//Copio Pagina en un nuevo objeto Pagina2
Pagina2 = new cPagina2(Pagina);

//Cambio la propiedad Name de Pagina2
Pagina2.Cont.Name = 'Tabla2';
//Cambio el valor de un elemento de la propiedad array de Pagina2
Pagina2.Cont.Objeto[9].Valor = 'Cambiado';

//Listo en pantalla los dos objetos
cargar_tabla(Pagina,document.all.cuerpotabla);
cargar_tabla(Pagina2.Cont,document.all.cuerpotabla 2);

//Coparación de los objetos
if (Pagina!=Pagina2) alert("Distintos");
else alert("Iguales");

/*EL RESULTADO ES DESASTROSO: al cambiar el objeto2 cambia el objeto1, y para más 'inri'
dice que son distintos*/
}
function duplicar(objObjeto){
var Aux = new cPagina();

Aux = objObjeto
return Aux;
}
function copiar(objObjeto){
var intI;
var Aux = new cPagina();

for(intI=0;intI<objObjeto.Objeto.length;intI++){
Aux.Objeto[intI] = new cObjeto(objObjeto.Objeto[intI].Valor);
}
return Aux;
}
function cargar_tabla(objObjeto,tabla){
var intI;
var objtabla;
var fila;
var celda;

objtabla = tabla;

fila = document.createElement('tr');
celda = document.createElement('td');
celda.width = 175;
celda.height = 30;
celda.align = 'center';
celda.innerHTML = '<b>'+objObjeto.Name+'</b>';
fila.appendChild(celda);
objtabla.appendChild(fila);

for(intI=0;intI<objObjeto.Objeto.length;intI++){
fila = document.createElement('tr');

celda = document.createElement('td');
celda.width = 10;
celda.innerText = objObjeto.Objeto[intI].Valor;
fila.appendChild(celda);

objtabla.appendChild(fila);
}
}
</script>

Sin tener el cuenta el tema de la comparación (lo dejo para más tarde) quisiera saber ¿Cómo una clase en otra por valor sin tener que recorrer propiedad a propiedad o cada elemento de un array (que pudiera estar como una propiedad de la clase)?

Gracias. Estoy desesperado. Porque no se me ocurre nada, ni sencillo ni complicado.
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 17:44.