Selama pengembangan, tidak dapat dihindari bahwa Anda dapat mengganggu hubungan referensi antara objek dan hanya ingin meninggalkan salinan.
Dalam JavaScript, metode sederhana adalah menggunakan fungsi JSON untuk merangkai objek menjadi string, dan kemudian menguraikannya menjadi objek baru. Baik pencarian kode online, masih ada banyak kode klon di komunitas open source.
Meskipun kodenya dapat ditemukan, hal -hal selalu menjadi milik orang lain, dan kode pembelajaran akan selalu menjadi topik yang tidak berubah.
Saya sendiri menulis dua fungsi kloning:
Cloneown: Kloning properti sendiri dari objek khusus, yang tidak termasuk properti yang diwariskan. Properti dapat berupa tipe dan array data dasar. Objek khusus dapat disesuaikan. Anda dapat merumuskan daftar nama atribut yang harus dikloning.
CloneArray: Kloning array, elemen -elemen dalam array dapat berupa objek, tipe dasar.
Salinan kode adalah sebagai berikut:
// Parameter pertama adalah objek yang dikloning, dan parameter kedua adalah daftar atribut yang perlu dikloning
fungsi cloneown () {
var obj = argumen [0];
if (typeof obj === 'tidak terdefinisi' || obj === null)
kembali {};
if (typeof obj! == 'objek')
kembalikan obj;
// Parameter kedua adalah daftar nama atribut, jadi gunakan daftar ini untuk memilih
// jika tidak, semua atribut akan dikloning
var attrs = argumen [1];
var enable_spec_attr = true;
if (! (ATTRS instance dari array)) {
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
}
var result = {};
var i;
untuk (i in attrs) {
attr = enable_spec_attr? attrs [i]: i;
//console.log(attr);
if (obj.hasownproperty (attr)) {
if (obj [attr] instance array) {
hasil [attr] = cloneArray (obj [attr]);
}
lain if (typeof obj [attr] === 'objek') {
hasil [attr] = cloneown (obj [attr]);
} kalau tidak {
Hasil [attr] = obj [attr];
}
}
}
hasil pengembalian;
}
Salinan kode adalah sebagai berikut:
// Kloning array
function cloneArray (array) {
if (typeof array === 'tidak terdefinisi' || array === null)
kembali [];
if (! (Contoh array array))
kembali [];
hasil = [];
var i;
untuk (i in array) {
if (typeof array [i]! == 'objek') {
Hasil [i] = array [i];
melanjutkan;
}
// Klon objek
hasil [i] = cloneown (array [i]);
}
hasil pengembalian;
}
Panggilan
1. Secara teratur mengkloning objek kustom:
Salinan kode adalah sebagai berikut:
var a = {
Nama: 'Frank',
Usia: 20
};
var b = cloneown (a);
2. Tentukan properti yang dikloning
Salinan kode adalah sebagai berikut:
var a = {
Nama: 'Frank',
Usia: 20,
Alamat: 'di mana saja'
};
var b = cloneowne (a, ['nama', 'usia']);
3. Clone Objek khusus yang berisi atribut array
Salinan kode adalah sebagai berikut:
var a = {
Nama: 'KXH',
Usia: 20,
Buku: ['hai', 'ho', 'ali'],
suka: [
{wname: 'kaili', upah: 81, fav: "aaaaa"},
{wname: 'seli', upah: 82, fav: "bbb"},
{wname: 'ailun', upah: 83, fav: "ccc"},]
};
var b = cloneowne (a);
4. Tepuk array dengan objek kustom
Salinan kode adalah sebagai berikut:
var a = [
{
Nama: 'Frank',
Usia: 20
},
{
Nama: 'Leon',
Usia: 30
}
];
var b = cloneArray (a);
Masih banyak masalah dengan kode di atas, seperti kloning objek bawaan, seperti tipe data.
Masalah dikelola, dan proses pembelajaran seperti itu juga harus dilakukan.