Rumah  >  Artikel  >  hujung hadapan web  >  WeakSet dalam JS?

WeakSet dalam JS?

WBOY
WBOYasal
2024-07-19 19:27:52310semak imbas

WeakSet in JS?

WeakSet dalam JavaScript ialah jenis set khas di mana objek di dalamnya mempunyai rujukan "lemah". Ini bermakna jika tiada rujukan lain kepada objek yang disimpan dalam WeakSet, objek itu boleh dikumpul sampah. Tidak seperti Set biasa, WeakSet hanya menerima objek sebagai elemen, dan objek tersebut dipegang dengan lemah. Ini menjadikan WeakSet berguna untuk kes di mana anda ingin menjejak objek tetapi tidak mahu menghalangnya daripada dikumpul sampah jika ia tidak lagi diperlukan di tempat lain.

Ciri-ciri WeakSet:

1 Objek Sahaja: WeakSet hanya boleh mengandungi objek, bukan nilai primitif seperti nombor atau rentetan.

2 Rujukan Lemah: Rujukan kepada objek dalam WeakSet adalah lemah, bermakna jika tiada rujukan lain kepada objek, ia boleh menjadi sampah yang dikumpul.

3 Tiada Harta Saiz: Anda tidak boleh mendapatkan saiz WeakSet kerana ia tidak mendedahkan bilangan elemennya.

4. Tiada Lelaran: Anda tidak boleh lelaran pada WeakSet, kerana ia tidak mempunyai kaedah seperti forEach atau iterator seperti Set.

Penggunaan Asas:

let weakset = new WeakSet();

let obj1 = {name: "object1"};
let obj2 = {name: "object2"};

weakset.add(obj1);
weakset.add(obj2);

console.log(weakset.has(obj1)); // true
console.log(weakset.has(obj2)); // true

obj1 = null; // obj1 is eligible for garbage collection

console.log(weakset.has(obj1)); // false

Contoh Lucu:

Mari bayangkan senario di mana WeakSet adalah seperti kelab rahsia untuk pengintip. Kelab ini sangat berahsia, dan jika pengintip tidak lagi aktif, mereka akan lenyap tanpa jejak. Kelab tidak pernah mengira ahlinya, dan anda tidak boleh mendapatkan senarai orang yang berada dalam kelab itu. Anda hanya boleh bertanya sama ada pengintip tertentu berada dalam kelab.

// The Secret Spy Club
class Spy {
    constructor(name) {
        this.name = name;
    }
    introduce() {
        console.log(`Hi, I am Agent ${this.name}`);
    }
}

let spy1 = new Spy("007");
let spy2 = new Spy("008");

let spyClub = new WeakSet();

// Adding spies to the secret club
spyClub.add(spy1);
spyClub.add(spy2);

console.log(spyClub.has(spy1)); // true
console.log(spyClub.has(spy2)); // true

spy1.introduce(); // Hi, I am Agent 007
spy2.introduce(); // Hi, I am Agent 008

// Spy 007 finishes his mission and disappears
spy1 = null; // Now Agent 007 is no longer in the club and is eligible for garbage collection

// Let's see if spies are still in the club
console.log(spyClub.has(spy1)); // false, because Agent 007 is no longer referenced
console.log(spyClub.has(spy2)); // true, because Agent 008 is still active

// Agent 008 finishes his mission too
spy2 = null; // Now Agent 008 is also eligible for garbage collection

// Checking club members again
console.log(spyClub.has(spy2)); // false, no active spies left

Dalam contoh lucu ini, WeakSet ialah kelab pengintip rahsia, dan pengintip adalah objek. Apabila pengintip (objek) menyelesaikan misi mereka dan tiada rujukan lain kepada mereka, mereka hilang (mendapatkan sampah dikumpul) tanpa sebarang kesan, sama seperti cara objek dialih keluar daripada WeakSet apabila ia tidak lagi dirujuk di tempat lain dalam kod.

Atas ialah kandungan terperinci WeakSet dalam JS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Proksi dalam JavaScriptArtikel seterusnya:Proksi dalam JavaScript