0Pricing
JavaScript Academy · درس

تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal

امنعوا إجراء تغييرات على الكائنات.

تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

لماذا نجمّد الكائنات؟

يعني عدم القابلية للتغيير أن البيانات لا يمكن تغييرها بعد إنشائها. ويمنع ذلك التغييرات غير المقصودة، ويجعل فهم التعليمات البرمجية أسهل، ويتجنب فئات كاملة من الأخطاء.

يوفّر JavaScript الدالتين Object.freeze وObject.seal لتقييد الكائنات.

أساسيات Object.freeze

يجعل Object.freeze الكائن للقراءة فقط بالكامل: فلا يمكنك إضافة الخصائص أو حذفها أو تغييرها. ويُرجع الكائن نفسه، ولكن بعد تجميده.

const user = Object.freeze({ name: 'Ada', age: 36 });
user.age = 99;
console.log(user.age);

التحقق باستخدام isFrozen

تُخبرك Object.isFrozen بما إذا كان الكائن مجمّدًا. ويفيد ذلك قبل محاولة إجراء تحديث.

const config = Object.freeze({ debug: false });
const settings = { theme: 'dark' };

console.log(Object.isFrozen(config));
console.log(Object.isFrozen(settings));

الفشل الصامت مقابل الفشل الصريح

في التعليمات البرمجية غير الصارمة، تفشل عمليات الكتابة إلى كائن مجمّد بصمت. أما في الوضع الصارم، فتطرح TypeError. وفي كلتا الحالتين لا تتغير القيمة مطلقًا.

'use strict';
const frozen = Object.freeze({ x: 1 });
try {
  frozen.x = 2;
} catch (e) {
  console.log(e.name);
}
console.log(frozen.x);

يمنع التجميد إضافة خصائص جديدة

يمنع التجميد أيضًا إضافة الخصائص. ولا يظهر المفتاح الجديد ببساطة.

const point = Object.freeze({ x: 0 });
point.y = 5;
console.log(point.y);
console.log(Object.keys(point));

يمنع التجميد حذف الخصائص

لا يمكنك أيضًا حذف الخصائص من كائن مجمّد. وتظل الخاصية موجودة.

const obj = Object.freeze({ keep: 'me' });
delete obj.keep;
console.log(obj.keep);

يختلف Object.seal

يُعدّ Object.seal أقل صرامة من التجميد. فلا يمكنك إضافة الخصائص أو حذفها، ولكن لا يزال بإمكانك تغيير القيم الموجودة.

const sealed = Object.seal({ count: 1 });
sealed.count = 2;
sealed.extra = 3;

console.log(sealed.count);
console.log(sealed.extra);

التحقق باستخدام isSealed

تُبلغك Object.isSealed بما إذا كان الكائن مختومًا. لاحظ أن كل كائن مجمّد هو أيضًا مختوم، ولكن العكس غير صحيح.

const sealed = Object.seal({ a: 1 });
const frozen = Object.freeze({ b: 2 });

console.log(Object.isSealed(sealed));
console.log(Object.isSealed(frozen));
console.log(Object.isFrozen(sealed));

ملخص freeze وseal

freeze: لا إضافة ولا حذف ولا تغيير. seal: لا إضافة ولا حذف، ولكن التغيير مسموح. اختر seal عندما يكون هيكل الكائن ثابتًا، لكن قيمه تتغير.

const f = Object.freeze({ v: 1 });
const s = Object.seal({ v: 1 });

f.v = 100;
s.v = 100;

console.log('frozen v:', f.v);
console.log('sealed v:', s.v);

preventExtensions

أخف القيود هو Object.preventExtensions: فلا يمكنك إضافة الخصائص، ولكن يمكنك تغيير الخصائص الموجودة وحذفها. وهو الأضعف بين الخيارات الثلاثة.

const obj = Object.preventExtensions({ a: 1 });
obj.a = 2;
obj.b = 3;

console.log(obj.a);
console.log(obj.b);
console.log(Object.isExtensible(obj));

لماذا يهم هذا؟

يمنع تجميد الإعدادات والثوابت التعديلات غير المقصودة في مختلف أجزاء قاعدة التعليمات البرمجية. لكن تذكّر أن Object.freeze سطحي، ولذلك تظل الكائنات المتداخلة قابلة للتغيير. ستعالج ذلك في الدرس التالي.

const SETTINGS = Object.freeze({ maxRetries: 3 });
function tryUpdate() {
  SETTINGS.maxRetries = 10;
}
tryUpdate();
console.log(SETTINGS.maxRetries);

تحقق سريع

ما الفرق بين Object.freeze وObject.seal؟

مراجعة: freeze وseal

لقد تعلّمت تقييد الكائنات:

  • Object.freeze: لا إضافة ولا حذف ولا تغيير. ويمكن التحقق باستخدام isFrozen.
  • Object.seal: لا إضافة ولا حذف، ولكن التغيير مسموح.
  • preventExtensions: يمنع الإضافة فقط.
  • الخيارات الثلاثة كلها سطحية، وهذا يقودنا إلى التجميد العميق في الدرس التالي.

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

هل درس «تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal» مجاني؟

نعم — نص درس «تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal»؟

امنعوا إجراء تغييرات على الكائنات. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. تجميد الكائنات وإغلاقها باستخدام Object.freeze وseal
  2. التجميد السطحي مقابل العميق
  3. أنماط التحديث غير القابل للتغيير
  4. structuredClone للنسخ العميقة
← العودة إلى JavaScript Academy