Copia superficial: no se pueden copiar atributos complejos en objetos como matrices y objetos de referencia internos
// Usa la recursión para lograr una copia superficial y profunda de js var obj1 = { nombre: 'zs' , edad: 18 , perro:{ nombre: 'ruibarbo' , edad: 3 } }; var obj2 = {}; // Complete la copia del objeto. La copia superficial puede copiar principalmente algunos atributos básicos. Los atributos del objeto no se pueden copiar. Cuando se cambia el objeto original y el atributo del objeto pertenece, el objeto copiado también cambiará. Para ( clave var en obj1) { obj2 [clave] = obj1 [clave]; } obj1.dog.name = "xxxxxxx"; // aunque obj2 anterior copia obj1, obj2 también se corregirá cuando cambie el objeto de obj1. Esto se denomina copia superficial console.dir (obj2);
Copia profunda: existen dos objetos completamente independientes
// Objeto 1
var obj1 = { nombre: 'zs' , edad: 18 , perro:{ nombre: 'ruibarbo' , edad: 3 }, coches: [ "qq", "jeep" ] };
// Objeto 2 var obj2 = {}; función deepCopy (source, target) { for ( var key in source) { var item = source [key]; if (item instanceof Object) { target [key] = {}; // Define un objeto vacío para recibir el contenido copiado deepCopy (item, target [key]); // Llamada recursiva } else if (item instanceof Array) { objetivo [clave] = []; deepCopy (elemento, objetivo [clave]); } más { objetivo [clave] = fuente [clave]; } } } deepCopy (obj1, obj2); obj1.dog.name = "xxxxxxx" ; console.dir (obj1); console.dir (obj2);