Durante o desenvolvimento, é inevitável que você possa interromper a relação de referência entre objetos e apenas deseja deixar uma cópia.
No JavaScript, o método simples é usar a função JSON para rastrear o objeto em uma string e analisá -lo em um novo objeto. Pesquise o código on -line, ainda existem muitos códigos de clone na comunidade de código aberto.
Embora o código possa ser encontrado, as coisas sempre são de outra pessoa, e os códigos de aprendizado sempre serão um tópico imutável.
Eu escrevi duas funções clonadas:
Clonewn: clone as próprias propriedades de um objeto personalizado, que não inclui propriedades herdadas. As propriedades podem ser tipos e matrizes de dados básicos. Objetos personalizados podem ser personalizados. Você pode formular uma lista de nomes de atributos para clone.
CLONEARRAY: Clone uma matriz, os elementos da matriz podem ser objetos, tipos básicos.
A cópia do código é a seguinte:
// O primeiro parâmetro é o objeto clonado, e o segundo parâmetro é a lista de atributos que precisa ser clonada
função cloneown () {
var obj = argumentos [0];
if (typeof obj === 'indefinido' || obj === null)
retornar {};
if (typeof obj! == 'objeto')
retornar obj;
// O segundo parâmetro é a lista de nomes de atributos, então use esta lista para selecionar
// caso contrário, todos os atributos serão clonados
var atts = argumentos [1];
var enable_spec_attr = true;
if (! (attrs instayof matriz)) {
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
}
var resultado = {};
var i;
para (i em attrs) {
att = enable_spec_attr? attrs [i]: i;
//console.log(attr);
if (obj.hasownProperty (att)) {
if (obj [attr] instância da matriz) {
resultado [att] = clonearray (obj [att]);
}
caso contrário, if (typeof obj [att] === 'objeto') {
resultado [att] = cloneown (obj [att]);
} outro {
resultado [att] = obj [att];
}
}
}
resultado de retorno;
}
A cópia do código é a seguinte:
// Clone a matriz
Função CLONEARRAY (Array) {
if (typeof matriz === 'indefinido' || array === null)
retornar [];
if (! (Instância da matriz de matriz))
retornar [];
resultado = [];
var i;
para (i na matriz) {
if (typeof matriz [i]! == 'objeto') {
resultado [i] = array [i];
continuar;
}
// Objeto de clone
resultado [i] = cloneown (matriz [i]);
}
resultado de retorno;
}
Chamar
1. Clone regularmente objetos personalizados:
A cópia do código é a seguinte:
var a = {
Nome: 'Frank',
Idade: 20
};
var b = cloneown (a);
2. Especifique as propriedades clonadas
A cópia do código é a seguinte:
var a = {
Nome: 'Frank',
Idade: 20,
Endereço: 'Qualquer onde'
};
var b = cloneowne (a, ['nome', 'idade']);
3.Come um objeto personalizado contendo atributos de matriz
A cópia do código é a seguinte:
var a = {
Nome: 'KXH',
Idade: 20,
Livros: ['hai', 'ho', 'ali'],
Gostos: [
{wname: 'kaili', salário: 81, fav: "aaaaa"},
{wname: 'seli', salário: 82, fav: "bbb"},
{wname: 'ailun', salário: 83, fav: "ccc"},]
};
var b = cloneowne (a);
4.Come a matriz com objetos personalizados
A cópia do código é a seguinte:
var a = [
{
Nome: 'Frank',
Idade: 20
},
{
Nome: 'Leon',
Idade: 30
}
];
var b = clonearray (a);
Ainda existem muitos problemas com o código acima, como a clonagem de objetos internos, como o tipo de data de dados.
Os problemas são gerenciados e esse processo de aprendizado também deve ser feito.