في هذا الدرس 6تصفّح المواضيع
تتميز الكائنات في JavaScript بمرونة التوسع الديناميكي؛ فلا يُشترط حصر جميع الخصائص مسبقاً لحظة إنشاء الأقواس المعقوفة { ... }، بل يكفي إسناد قيمة لأي اسم خاصية جديد عبر account.verified = true أو الأقواس المربعة ليُضاف المفتاح وقيمته إلى الكائن فوراً.
إن إسناد user.tempToken = undefined يفرغ القيمة فقط لكنه يبقي اسم المفتاح موجوداً ضمن Object.keys(user)! أما لإزالة الخاصية باسمها وقيمتها نهائياً من الكائن فنستخدم المعامل الأحادي المخصص للكائنات delete user.tempToken.
لاحظ أن مكان delete الصحيح هو خصائص الكائنات تحديداً (بخلاف المصفوفات التي تجنبناه فيها سابقاً لأنه يترك فجوات رقمية).
const session = { user: 'karim', otp: 8841 };
session.role = 'editor';
delete session.otp;
document.getElementById('del-out').textContent =
`Keys: ${Object.keys(session).join(', ')} | otp: ${session.otp}`;
فحص الشرط obj.discount !== undefined يعجز عن التفرقة بين خاصية غائبة تماماً وخاصية موجودة أُسندت إليها القيمة undefined. لذلك وفرت اللغة أداتين متخصصتين، تتفوق ثانيتهما أمنياً:
| أداة الفحص | الخصائص الذاتية المباشرة | الخصائص الموروثة مثل "toString" |
|---|---|---|
"key" in obj | ترجع true | ترجع true (تفتش السلسلة الموروثة) |
Object.hasOwn(obj, "key") | ترجع true | ترجع false (فحص ذاتي آمن ودقيق) |
لا تقتصر الكائنات على تخزين البيانات الجامدة، بل يمكنها ضم سلوكيات تنفيذية بداخلها تُعرف باسم الدوال التابعة للكائن (Methods)—تماماً مثل الدوال المدمجة التي استدعيناها سابقاً كـ console.log() وarray.join().
توفر الصياغة المختصرة الحديثة كتابة اسم الدالة متبوعاً بقوسين هلاليين وقوسين معقوفين مباشرةً داخل الكائن مثل syncTotal() { ... }، ثم تشغيلها وقت الحاجة عبر cart.syncTotal().
كيف تصل دالة الكائن إلى بقية الخصائص المحفوظة معها داخل نفس الكائن؟ عبر الكلمة المحجوزة الذكية this! فعند استدعاء invoice.computeFinal() تشير this تلقائياً إلى الكائن invoice الواقع قبل النقطة، مما يمكّنها من قراءة وتحديث خصائصه عبر this.subtotal بمرونة تامة.
const invoice = {
subtotal: 200,
discount: 30,
finalDue: 0,
applyDiscount() {
this.finalDue = this.subtotal - this.discount;
},
};
invoice.applyDiscount();
document.getElementById('mth-out').textContent =
`Final due: ${invoice.finalDue} USD`;
من الأخطاء الشائعة جداً كتابة user.length لمعرفة عدد خصائص الكائن؛ فالكائنات العادية لا تملك خاصية length مدمجة أصلاً، ولذلك يرجع التعبير user.length القيمة undefined!
الطريق القياسي الصحيح لحساب عدد خصائص الكائن هو قراءة طول مصفوفة مفاتيحه عبر Object.keys(user).length.
const settings = { theme: 'dark', lang: 'ar', beta: undefined };
const hasBeta = Object.hasOwn(settings, 'beta');
const totalProps = Object.keys(settings).length;
document.getElementById('cnt-out').textContent =
`hasOwn('beta'): ${hasBeta} | Total keys: ${totalProps}`;
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس إضافة الخصائص ديناميكياً، وحذفها بالمعامل delete، وفحص الملكية الذاتية بأمان عبر Object.hasOwn()، وتعريف دوال الكائن المختصرة باستخدام this، وحساب عدد المفاتيح عبر Object.keys(obj).length. الخطوة التالية: انتقل الآن إلى درس «مقارنة الكائنات والمصفوفات في JavaScript» لبناء مصفوفات الكائنات والتمييز الدقيق بين البنيتين.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 delete Operator معامل حذف الخاصية delete
- معامل أحادي يزيل الخاصية باسمها وقيمتها نهائياً من الكائن.
- للمراجعة
- 02 Object.hasOwn(obj, key) دالة الفحص الذاتي Object.hasOwn
- دالة حديثة ترجع true فقط إذا كانت الخاصية مملوكة مباشرةً للكائن نفسه وليست موروثة.
- للمراجعة
- 03 Object Method دالة الكائن التابعة (Method)
- سلوك تنفيذي معرف داخل الكائن يعمل على بياناته ويُكتب بصياغة الأقواس المختصرة الحديثة.
- للمراجعة
- 04 this Keyword الكلمة المرجعية this
- كلمة محجوزة تشير داخل دالة الكائن التقليدية إلى الكائن الذي استُدعيت الدالة من خلاله.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 ES2022 ES2022
- ECMAScript 2022 Standard
- الإصدار القياسي الذي اعتمد الدالة الآمنة Object.hasOwn() لفحص خصائص الكائنات.
- للمراجعة
- 02 OTP OTP
- One-Time Password
- رمز تحقق مؤقت لمرة واحدة يُحذف عادةً من كائن الجلسة بالمعامل delete فور انتهاء الحاجة إليه.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح مثال حساب الفاتورة في محرر التجربة وغيّر قيمة discount من 30 إلى 50 وتحقق من تحديث النتيجة.
-
افحص التبويب الأول في المحاكي لمشاهدة كيف تميز Object.hasOwn بين الخصائص الذاتية والموروثة.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.