WeakMap وWeakSet — خصوصية ومخابئ بسيطة
تعلّموا أساسيات WeakMap وWeakSet: مفاتيح كائنية فقط، ومن دون size أو تكرار، وأدوات مساعدة للخصوصية، ومخابئ صغيرة تُنظَّف تلقائيًا
WeakMap وWeakSet — خصوصية ومخابئ بسيطة درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
لماذا نستخدم المجموعات الضعيفة؟
الهدف: إضافة بيانات وصفية إلى الكائنات دون منع جامع البيانات المهملة من جمعها.
- WeakMap: كائن → قيمة
- WeakSet: عضوية الكائنات
- لا توجد size ولا إمكانية للتكرار
- مناسبة جدًا للخصوصية وذاكرات التخزين المؤقت

أساسيات WeakMap
لا يقبل WeakMap إلا مفاتيح الكائنات؛ ويدعم set وget وhas وdelete، ولا يدعم التكرار أو size.
// WeakMap: keys must be objects
const wm = new WeakMap();
const user = { name: "Ayla" };
wm.set(user, { visits: 1 });
console.log("has user?", wm.has(user));
console.log("get meta:", wm.get(user));
// Note: no wm.size, no wm.keys() — not iterable

أساسيات WeakSet
يحتفظ WeakSet بالكائنات؛ ولا يسمح بالتكرارات أو التكرار أو الخاصية size.
// WeakSet: store objects without duplicates
const ws = new WeakSet();
const obj1 = {};
const obj2 = {};
ws.add(obj1);
ws.add(obj2);
ws.add(obj1); // duplicate ignored
console.log("has obj1?", ws.has(obj1));
// Note: no ws.size and no iteration

الخصوصية عبر WeakMap
استخدموا WeakMap لإرفاق بيانات مخفية بكائنات API؛ وعند زوال كائنات API، يمكن جمع البيانات.
// Privacy helper: store private data outside the object
const _priv = new WeakMap();
function makeCounter() {
const api = {};
_priv.set(api, { value: 0 });
api.inc = function () {
const box = _priv.get(api);
box.value = box.value + 1;
console.log("value", box.value);
};
// No public field exposes value directly
return api;
}
const c = makeCounter();
c.inc();
c.inc();
// console.log(c.value) -> undefined (nothing public)

ذاكرة تخزين مؤقت لكل كائن
أنشئوا ذاكرة تخزين مؤقت لكل كائن؛ تختفي الإدخالات عندما لا يعود الكائن المفتاح مشارًا إليه.
// Cache computed data per object without leaks
const cache = new WeakMap();
function computeLength(doc) {
// Return cached result if present
if (cache.has(doc)) {
return cache.get(doc);
}
// Fake "expensive" compute
const result = (doc.text || "").length;
cache.set(doc, result);
return result;
}
const d1 = { text: "hello" };
const d2 = { text: "world!" };
console.log("len d1:", computeLength(d1));
console.log("len d1 cached:", computeLength(d1));
console.log("len d2:", computeLength(d2));
// If d1/d2 become unreachable, their cache entries can disappear automatically

القيود ومتى لا تستخدمونه
تذكروا:
- لا يدعم WeakMap/WeakSet التكرار أو size.
- يجب أن تكون المفاتيح كائنات.
- استخدموا Map/Set إذا كنتم تحتاجون إلى سرد المفاتيح أو عدّ العناصر.

اختبار WeakMap مقابل Map
تحقق سريع: حالة استخدام WeakMap.

مراجعة
مراجعة: استخدموا WeakMap للحفاظ على خصوصية الربط بين الكائن والقيمة ولإنشاء ذاكرات تخزين مؤقت؛ واستخدموا WeakSet لعضوية الكائنات دون تسريبات. تذكروا: مفاتيح كائنات فقط، ولا تكرار أو size.

الأسئلة الشائعة
هل درس «WeakMap وWeakSet — خصوصية ومخابئ بسيطة» مجاني؟
نعم — نص درس «WeakMap وWeakSet — خصوصية ومخابئ بسيطة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «WeakMap وWeakSet — خصوصية ومخابئ بسيطة»؟
تعلّموا أساسيات WeakMap وWeakSet: مفاتيح كائنية فقط، ومن دون size أو تكرار، وأدوات مساعدة للخصوصية، ومخابئ صغيرة تُنظَّف تلقائيًا تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «WeakMap وWeakSet — خصوصية ومخابئ بسيطة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات Map وSet
- WeakMap وWeakSet — خصوصية ومخابئ بسيطة
- أنماط التكرار