No sé cuándo comenzó, pero apareció una nueva palabra en el círculo frontal: clonación de profundidad del objeto. Se ve muy alto, pero de hecho no es nuevo. Es posible que lo haya usado en nuestro desarrollo real de proyectos, pero debido a la profundidad de los caracteres chinos, algunas cosas originalmente simples se vuelven misteriosas por algún vocabulario aparentemente profesional.
En primer lugar, ¿por qué necesitas clonar un objeto profundamente? Permítame adivinar: a veces piensa que el documento de objeto incorporado de JS es demasiado largo, entonces puede hacer esto:
La copia del código es la siguiente:
var d = documento;
d.by = function (id) {
regreso D.getElementById (id);
};
d.by ('id'). innerhtml = 'hola sentsin';
El código anterior simplifica document.getElementById, y también agrega un método de miembro al objeto de documento original. Puede verificar su juicio a través del valor de estado devuelto por document.HasownProperty ('by'). Echemos un vistazo al siguiente ejemplo.
La copia del código es la siguiente:
Var Person = {nombre: 'xianxin', profesión: 'desarrollo front-end', lugar: 'hangzhou'};
Var Newperson = Persona;
newperson.age = '24';
console.log (persona);
// resultado: {nombre: 'xianxin', profesión: 'desarrollo front-end', lugar: 'hangzhou', edad: 24}
Se puede ver que cuando un objeto simplemente se pasa a una nueva variable, es simplemente un alias para el objeto. Esto significa que el valor de la clave del objeto original cambiará a través de la operación en el alias. Pero el problema es que a veces queremos que la nueva persona sea completamente independiente de la persona y no existe una relación de sincronización entre sí, por lo que necesitamos generar una copia, consulte el ejemplo:
La copia del código es la siguiente:
var cloneobj = function (obj) {
var str, newobj = obj.constructor === matriz? []: {};
if (typeof obj! == 'objeto') {
devolver;
} else if (window.json) {
str = json.stringify (obj), // objeto serializado
newobj = json.parse (str); //Restaurar
} demás {
para (var i en obj) {
newobj [i] = typeof obj [i] === 'objeto'?
cloneobj (obj [i]): obj [i];
}
}
devolver newobj;
};
//prueba
var obj = {a: 0, b: 1, c: 2};
var arr = [0, 1, 2];
// ejecutar clonación profunda
var newobj = cloneobj (obj);
var newarr = cloneObj (arr);
// eliminar la eliminación del miembro del nuevo objeto clonado
eliminar newobj.a;
newarr.splice (0,1);
console.log (obj, arr, newobj, newarr);
// resultado: {a: 0, b: 1, c: 2}, [0, 1, 2], {b: 1, c: 2}, [1, 2];
Esta es la llamada clonación de objetos. Pero hay algunas cosas que deben explicarse. El objeto JSON y sus métodos miembros Stringify and analy en el código pertenecen a la especificación ECMAScript5. Son responsables de convertir un objeto (incluidos los objetos de matriz) en cuerdas y restaurarlas, dando cuenta de la copia profunda del objeto. Entonces, para navegadores de bajo nivel (como IE), si copia matrices, puede usar Newobj.concat (OBJ), y los objetos ordinarios simplemente pueden enumerar y asignar valores.