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.