Rumah >hujung hadapan web >tutorial js >Perbincangan ringkas tentang medium Javascript dan salinan mendalam_Pengetahuan asas
Dalam JavaScript, semua tugasan antara pembolehubah objek melepasi alamat Sesetengah pelajar mungkin bertanya objek mana yang merupakan objek. Mungkin lebih baik untuk memberi contoh:
Jadi sebenarnya, objek utama yang perlu kita proses dalam salinan dalam adalah objek objek bukan objek hanya perlu diberikan secara langsung dan biasa. Idea saya untuk melaksanakan js deep copy ialah:
Lintas semua sifat objek,
Jika atribut ialah "objek", pengendalian khas diperlukan,
Jika objek ini istimewa dan merupakan tatasusunan, kemudian buat tatasusunan baharu dan salin elemen dalam tatasusunan dengan mendalam
Jika objek ini ialah objek bukan tatasusunan, hanya panggil kaedah salinan dalam secara rekursif padanya.
Jika ia bukan "objek", salin sahaja seperti biasa.
Berikut ialah pelaksanaan saya:
untuk (attr dalam ini) {
Jika (this.hasOwnProperty(attr)) {
Jika (jenis(ini[attr]) === "objek") {
Jika (ini[attr] === batal) {
obj[attr] = null;
}
lain jika (Object.prototype.toString.call(this[attr]) === '[object Array]') {
obj[attr] = [];
untuk (i=0; i
}
} lain {
obj[attr] = this[attr].DeepCopy();
}
} lain {
obj[attr] = ini[attr];
}
}
}
Kembalikan obj;
};
Jika penyemak imbas menyokong ECMAScript 5, untuk menyalin dalam semua sifat sifat objek, anda boleh menggunakan
untuk menggantikan
Kelebihan melaksanakan kaedah ini secara langsung pada Object.prototype ialah semua objek akan mewarisi kaedah ini. Kelemahannya ialah sesetengah perpustakaan juga menulis semula objek Objek, jadi konflik kadangkala berlaku. Ini adalah sesuatu yang perlu diperhatikan. Kaedah penggunaan khusus adalah seperti berikut:
Di atas adalah penjelasan tentang salinan dalam, tetapi kerana kita bercakap tentang salinan mendalam hari ini, kami juga ingin merumuskan secara ringkas persamaan dan perbezaan antara mereka.
Salinan cetek (klon bayangan): Hanya jenis asas dan jenis objek objek disalin, yang masih tergolong dalam rujukan asal.
Salinan dalam (klon dalam): bukan sahaja menyalin kelas asas objek, tetapi juga menyalin objek dalam objek asal Maksudnya, objek baharu sepenuhnya dijana.