0Pricing
JavaScript Academy · درس

WeakMap وWeakSet — خصوصية ومخابئ بسيطة

تعلّموا أساسيات WeakMap وWeakSet: مفاتيح كائنية فقط، ومن دون size أو تكرار، وأدوات مساعدة للخصوصية، ومخابئ صغيرة تُنظَّف تلقائيًا

WeakMap وWeakSet — خصوصية ومخابئ بسيطة درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.

لماذا نستخدم المجموعات الضعيفة؟

الهدف: إضافة بيانات وصفية إلى الكائنات دون منع جامع البيانات المهملة من جمعها.

  • WeakMap: كائن → قيمة
  • WeakSet: عضوية الكائنات
  • لا توجد size ولا إمكانية للتكرار
  • مناسبة جدًا للخصوصية وذاكرات التخزين المؤقت
WeakMap وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 1

أساسيات 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
WeakMap وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 2

أساسيات 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 وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 3

الخصوصية عبر 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)
WeakMap وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 4

ذاكرة تخزين مؤقت لكل كائن

أنشئوا ذاكرة تخزين مؤقت لكل كائن؛ تختفي الإدخالات عندما لا يعود الكائن المفتاح مشارًا إليه.

// 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 — خصوصية ومخابئ بسيطة — رسم توضيحي 5

القيود ومتى لا تستخدمونه

تذكروا:

  • لا يدعم WeakMap/WeakSet التكرار أو size.
  • يجب أن تكون المفاتيح كائنات.
  • استخدموا Map/Set إذا كنتم تحتاجون إلى سرد المفاتيح أو عدّ العناصر.
WeakMap وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 6

اختبار WeakMap مقابل Map

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

WeakMap وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 7

مراجعة

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

WeakMap وWeakSet — خصوصية ومخابئ بسيطة — رسم توضيحي 8

الأسئلة الشائعة

هل درس «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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات Map وSet
  2. WeakMap وWeakSet — خصوصية ومخابئ بسيطة
  3. أنماط التكرار
← العودة إلى JavaScript Academy