Durante el desarrollo, es inevitable que pueda interrumpir la relación de referencia entre los objetos y solo desea dejar una copia.
En JavaScript, el método simple es usar la función JSON para triturar el objeto en una cadena y luego analizarlo en un nuevo objeto. O busque código en línea, todavía hay muchos códigos de clones en la comunidad de código abierto.
Aunque se puede encontrar el código, las cosas siempre son de otra persona, y los códigos de aprendizaje siempre serán un tema inmutable.
Yo mismo escribí dos funciones clonadas:
Clonown: Clone Las propias propiedades de un objeto personalizado, que no incluye propiedades hereditarias. Las propiedades pueden ser tipos de datos básicos y matrices. Los objetos personalizados se pueden personalizar. Puede formular una lista de nombres de atributos para clon.
Clonearray: clon de matriz, los elementos en la matriz pueden ser objetos, tipos básicos.
La copia del código es la siguiente:
// El primer parámetro es el objeto clonado, y el segundo parámetro es la lista de atributos que debe clonarse
función clonown () {
var obj = argumentos [0];
if (typeof obj === 'Undefined' || obj === null)
devolver {};
if (typeOf obj! == 'objeto')
regresar obj;
// El segundo parámetro es la lista de nombres de atributos, así que use esta lista para seleccionar
// de lo contrario, todos los atributos serán clonados
var attrs = argumentos [1];
var enable_spec_attr = true;
if (! (attrs instancef array)) {
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
}
resultado var = {};
var i;
para (i en attrs) {
attr = enable_spec_attr? attrs [i]: i;
//console.log(attr);
if (obj.hasownproperty (attr)) {
if (obj [attr] instancia de array) {
resultado [attr] = clonearray (obj [attr]);
}
else if (typeof obj [attr] === 'objeto') {
resultado [attr] = clonown (obj [attr]);
} demás {
resultado [attr] = obj [attr];
}
}
}
resultado de retorno;
}
La copia del código es la siguiente:
// clonar la matriz
función clonearray (array) {
if (typeof array === 'Undefined' || Array === NULL)
devolver [];
if (! (instancia de matriz de matriz))
devolver [];
resultado = [];
var i;
para (i en matriz) {
if (typeof array [i]! == 'objeto') {
resultado [i] = array [i];
continuar;
}
// objeto clon
resultado [i] = clonown (matriz [i]);
}
resultado de retorno;
}
Llamar
1. Regularmente clon de objetos personalizados:
La copia del código es la siguiente:
var a = {
Nombre: 'Frank',
Edad: 20
};
var b = clonown (a);
2. Especifique las propiedades clonadas
La copia del código es la siguiente:
var a = {
Nombre: 'Frank',
Edad: 20,
Dirección: 'En cualquier lugar'
};
var b = clonownne (a, ['nombre', 'edad']);
3. Clone Un objeto personalizado que contiene atributos de matriz
La copia del código es la siguiente:
var a = {
Nombre: 'KXH',
Edad: 20,
Libros: ['Hai', 'Ho', 'Ali'],
me gusta: [
{wname: 'kaili', salario: 81, favorito: "aaaaa"},
{wname: 'seli', salario: 82, fav: "bbb"},
{wname: 'ailun', salario: 83, fav: "ccc"},]
};
var b = clonownne (a);
4. Clone la matriz con objetos personalizados
La copia del código es la siguiente:
var a = [
{
Nombre: 'Frank',
Edad: 20
},
{
Nombre: 'Leon',
Edad: 30
}
];
var b = clonearray (a);
Todavía hay muchos problemas con el código anterior, como la clonación de objetos incorporados, como el tipo DatateMe.
Se manejan los problemas, y este proceso de aprendizaje también debe hacerse.