implementación sencilla de objetos JavaScript profundidad de clonación

Es bien sabido, el tipo de referencia de objeto es
la dirección almacenada en el puntero de pila al objeto, los datos de objetos reales almacenados en el montón.
Así que cuando simplemente copia se realiza la operación, el puntero de dirección es en realidad una operación de copia, por lo que después se cambió el objeto de datos reales, se verán afectados los viejos y nuevos objetos.
Entonces, ¿cómo no se verán afectados?

Lo que llamamos la profundidad de la clonación de
JS en la profundidad de la clonación, en referencia al objeto original se cambia, clonado un nuevo objeto no va a cambiar el objeto original y el nuevo objeto es completamente independiente de la relación.
Clonación de profundidad se
clon superficial
valor de tipo primitivo se pasa, el tipo de objeto es todavía referencia.

(1) los tipos de originales: numérico, cadena, Boolean, null indefinido
(2) tipo de objeto que comprende: un objeto que es una colección de atributos, por supuesto, esto también es una función de dos objetos especiales ---- (JS en una y otros objetos), un conjunto ordenado de matrices (teclas).

Copiar el tipo de original:

//数值克隆的表现
var a="1";
var b=a;
b="2";
console.log(a);// "1"
console.log(b);// "2"
//字符串克隆的表现
var c="1";
var d=c;
d="2";
console.log(c);// "1"
console.log(d);// "2"

//布尔值克隆的表现
var x=true;
var y=x;
y=false;
console.log(x);// true
console.log(y);// false

Incluso si usamos el tipo original de la clonación de manera ordinaria todavía puede obtener los resultados correctos, la razón es el tipo original de almacenamiento es de los objetos de datos reales.
Tipo de Objeto:
objetos funcionales primer lugar, por supuesto, el tipo de objeto, pero la función puede lograrse por clonación de clon poco profunda

var m=function(){alert(1);};
var n=m;
n=function(){alert(2);};
 
console.log(m());//1
console.log(n());//2

Profundidad realización sencilla:

function deepClone(obj){
var newObj =obj instanceof Array ? [] :{};
for(var item in obj){
var temple=typeof obj[item] =='object' ? deepClone (obj[item]):obj[item];
newObj[item] =temple;
}
return newObj;
}

Para determinar objeto clonado no es un tipo de referencia, si se trata de un tipo de referencia, continúe iteración, si este es el tipo básico, copia directa.

Publicados 158 artículos originales · ganado elogios 44 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_43277404/article/details/103846758
Recomendado
Clasificación