JS WeakSet
WeakSet obyekti
JavaScript WeakSet - bu qiymatlari obyekt bo‘lishi shart bo‘lgan qiymatlar to‘plami.
WeakSet o‘z qiymatlariga kuchsiz havolalarni saqlaydi.
Misollar
// Create a WeakSet
let mySet = new WeakSet();
// Create an Object
let myObj = {fname:"John", lname:"Doe"};
// Add the Object
mySet.add(myObj);
// Do I have myObj in the mySet?
let answer = mySet.has(myObj);
O‘zingiz sinab ko‘ring »
// Create a WeakSet
let mySet = new WeakSet();
// Create an Object
let myObj = {fname:"John", lname:"Doe"};
// Add the Object
mySet.add(myObj);
// Delete the Object
mySet.delete(myObj);
// Do I have myObj in the mySet?
let answer = mySet.has(myObj);
O‘zingiz sinab ko‘ring »
Axlat yig‘ish (garbage collection)
JavaScript Garbage Collection (axlat yig‘ish) deb nomlanuvchi xotirani boshqarish mexanizmidan foydalanadi.
Asosiy funksiyalari quyidagilardir:
- Xotira resurslaridan samarali foydalanishni ta’minlash
- Foydalanilmayotgan o‘zgaruvchilar egallagan xotirani tiklang
- Preventing memory leaks
Kuchsiz havolalar
Oddiy to‘plamdan farqli o‘laroq, WeakSet o‘z qiymatlarining axlat yig‘ilishiga to‘sqinlik qilmaydi.
Agar dasturda qiymatga (obyektga) hech qanday havola qolmasa, u axlat yig‘ish (garbage collection) uchun yaroqli bo‘ladi.
Qiymat axlat yig‘ilganda, u WeakSet-dan o‘chiriladi.
Misol
// Create a WeakSet
let mySet = new WeakSet();
// Create an Object
let myObj = {fname:"John", lname:"Doe"};
// Add the Object
mySet.add(myObj);
// Remove the Object from memory
myObj = null;
// Now myObj in mySet will be garbage collected
Qiymatlar obyekt bo‘lishi shart
Primitiv qiymatlar WeakSet qiymatlari bo‘la olmaydi.
Qiymatlar obyekt bo‘lishi shart.
Ushbu cheklov axlat yig‘ish mexanizmi bilan bog‘liq; ibtidoiy narsalar obyektlar bilan bir xil tarzda yig‘ilgan axlat emas.
Obyektlarni kuzatish
WeakSet to‘plamga o‘xshaydi, lekin u faqat obyektlarni saqlaydi va ularni zaif ushlab turadi. Agar obyektga boshqa havolalar bo‘lmasa, u avtomatik ravishda axlat yig‘iladi.
Bu uni qo‘shimcha ma’lumotlarni (masalan, sanoqlarni) saqlamasdan obyektlarni kuzatish uchun qulay qiladi.
Tashrif buyuruvchilarni kuzatish:
let text = "";
// Create a WeakSet to track persons
const persons = new WeakSet();
// Visitor Objects
const John = {name:"John", age:40};
const Paul = {name:"Paul", age:41};
const Ringo = {name:"Ringo", age:42};
const George = {name:"George", age:43};
// Track visits
track(Paul);
track(Ringo);
track(Paul);
// Function to track visitors
function track(visitor) {
if (persons.has(visitor)) {
text += visitor.name + " is visiting again.<br>";
} else {
persons.add(visitor);
text += visitor.name + ", age" + visitor.age +", is visiting for the first time<br>";
}
}
O‘zingiz sinab ko‘ring »
Agar siz tashriflarni ham hisoblamoqchi bo‘lsangiz:
Avtomatik tozalash
Agar tashrif buyuruvchi obyektga barcha havolalarni olib tashlasangiz:
Tashrif buyuruvchilarni kuzatish:
John = null;
// The entry for John is now removed from the WeakMap (persons)
Iteratsiya qilinmaydi
WeakSet’lar sanab o‘tilmaydi.
Qiymatlarni for sikllari, forEach() yoki values() yordamida aylanib chiqib bo‘lmaydi.
Siz o‘lchamga kira olmaysiz. WeakSets o‘lcham xususiyatiga ega emas.
Cheklangan metodlar
WeakSet minimal, xotira uchun xavfsiz va obyektlarni shaxsiy va samarali kuzatish uchun mo‘ljallangan.
WeakSet cheklangan metodlar to‘plamini taqdim etadi:
| new WeakSet() | Yangi WeakSet obyektini yaratadi |
| add(object) | WeakSetga obyekt qo‘shadi |
| delete(object) | WeakSet obyektini o‘chiradi |
| has(object) | Agar obyekt WeakSet da mavjud bo‘lsa, true qiymatini qaytaradi |
WeakSetda quyidagilar mavjud emas:
- size xususiyati
- Spread operatori (...)
- clear() metodi
- Any logic methods (union, difference, intersection)
- Any iteration methods (forEach, keys, values, entries)
Yuqoridagilar dizayn bo‘yicha: obyektlar axlat yig‘ishda yo‘qolishi mumkin, ularni takrorlash yoki sanashning ma’nosi yo‘q.
Batafsil bilib oling:
Brauzerlarda qo‘llab-quvvatlash
WeakSet — ES6 imkoniyati.
ES6 2017 yil iyun oyidan boshlab barcha zamonaviy brauzerlarda to‘liq qo‘llab-quvvatlanadi:
| Chrome 51 |
Edge 15 |
Firefox 54 |
Safari 10 |
Opera 38 |
| May 2016 | Apr 2017 | Jun 2017 | Sep 2016 | Jun 2016 |
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
