javascript - Apakah kegunaan kaedah klon dalam js?
大家讲道理
大家讲道理 2017-06-26 10:52:02
0
3
770

Kadang-kadang apabila beroperasi pada tatasusunan, kaedah klon digunakan saya rasa tidak mengapa untuk menetapkan nilai secara langsung tanpa menggunakan kaedah ini. Untuk menjimatkan memori? Terdapat juga salinan cetek, salinan dalam, dan lain-lain, maafkan saya kerana menjadi orang baru. .

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(3)
typecho

Kelebihannya ialah tidak seperti "=", tatasusunan klon adalah bebas dalam ingatan, dan anda boleh melakukan apa sahaja yang anda mahu dengannya.

Dalam js, tatasusunan dan objek ialah jenis rujukan.

const arr = [1, 2, 3, 4, 5, 6];
const arr1 = arr; // 直接赋值,arr1指向的是arr的内存,也就是说arr发生改变时,arr1也会被改变
arr.push(123);
console.log(arr1); // [1, 2, 3, 4, 5, 6, 123]
const arr = [1, 2, 3, 4, 5, 6];
const arr1 = arr.slice(0); // 克隆了一个arr1,arr与arr1指向不同的内存,arr的改变并不会影响到arr1
arr.push(123);
console.log(arr1); // [1, 2, 3, 4, 5, 6]

Jadi, tujuan pengklonan adalah untuk menjana salinan data baharu tanpa mencemarkan data asal.

Bagi salinan dalam dan salinan cetek:

const obj1 = {
    name: 'Ash',
    class: {
        a: 1,
        b: 2,
    }
};

// 浅拷贝
const obj2 = {};
for (let key in obj1) {
    obj2[key] = obj1[key];
}

// 深拷贝
const copyObj = (obj) => {
    const newObj = {};
    for (let key in obj) {
        if (typeof obj[key] !== 'object') {
            newObj[key] = obj[key];
        } else {
            newObj[key] = copyObj(obj[key]);
        }
    }
    return newObj;
}
const obj3 = copyObj(obj1);

obj1.name = 'Coco';
obj1.class.a = 100;
console.log(obj2.name, obj2.class.a); // Ash 100
console.log(obj3.name, obj3.class.a); // Ash 1

Anda boleh melihat bahawa perbezaan antara salinan cetek dan salinan dalam ialah salinan cetek hanya melintasi lapisan pertama obj1, dan kemudian menetapkan setiap atribut obj1 kepada obj2 manakala salinan dalam tidak, apabila nilai atribut ialah objek Pada ini masa, salinan dalam akan mencipta objek kosong baharu, kemudian tetapkan nilai objek kepada objek kosong, dan kemudian kembalikan objek kosong sebagai atribut obj3.

给我你的怀抱

Prinsip yang sangat penting dalam pengaturcaraan JS ialah"Jangan sentuh objek yang bukan milik anda"

Untuk memberi anda metafora yang jelas, saya meminjamkan anda sebuah buku (objek), dan saya fikir anda hanya mahu membacanya (membaca), tetapi anda menggunakannya untuk berlatih kaligrafi (menulis saya tidak boleh membaca buku itu). anda kembalikan kepada saya kandungan biasa.

Dan deepClone menyelesaikan masalah ini, saya memberi anda sebuah buku, anda pergi dan menyalinnya, pulangkan buku itu kepada saya sebagaimana adanya, dan anda boleh membuang salinan itu mengikut kehendak anda.

阿神

Salinan dalam dan salinan cetek dalam javascript?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!