انتقل إلى محتوى الدرس
الدرس 29
دورة جافا سكريبت

دوال وخصائص الكائنات في JavaScriptJavaScript Object Methods

أدر خصائص ودوال الكائنات في JavaScript باحتراف: أضف الحقول ديناميكياً واحذفها بـ delete وافحص الملكية عبر Object.hasOwn وابنِ الدوال الداخلية باستخدام this.
أقسام الدرس
6
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
4,481
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تتميز الكائنات في JavaScript بمرونة التوسع الديناميكي؛ فلا يُشترط حصر جميع الخصائص مسبقاً لحظة إنشاء الأقواس المعقوفة { ... }، بل يكفي إسناد قيمة لأي اسم خاصية جديد عبر account.verified = true أو الأقواس المربعة ليُضاف المفتاح وقيمته إلى الكائن فوراً.

مخطط إدارة خصائص ودوال الكائن في JavaScript: الإضافة والحذف عبر delete والفحص عبر Object.hasOwn واستخدام this

إن إسناد user.tempToken = undefined يفرغ القيمة فقط لكنه يبقي اسم المفتاح موجوداً ضمن Object.keys(user)! أما لإزالة الخاصية باسمها وقيمتها نهائياً من الكائن فنستخدم المعامل الأحادي المخصص للكائنات delete user.tempToken.

لاحظ أن مكان delete الصحيح هو خصائص الكائنات تحديداً (بخلاف المصفوفات التي تجنبناه فيها سابقاً لأنه يترك فجوات رقمية).

JavaScript
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 بمرونة تامة.

JavaScript
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.

JavaScript
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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 delete Operator معامل حذف الخاصية delete
معامل أحادي يزيل الخاصية باسمها وقيمتها نهائياً من الكائن.
للمراجعة
02 Object.hasOwn(obj, key) دالة الفحص الذاتي Object.hasOwn
دالة حديثة ترجع true فقط إذا كانت الخاصية مملوكة مباشرةً للكائن نفسه وليست موروثة.
للمراجعة
03 Object Method دالة الكائن التابعة (Method)
سلوك تنفيذي معرف داخل الكائن يعمل على بياناته ويُكتب بصياغة الأقواس المختصرة الحديثة.
للمراجعة
04 this Keyword الكلمة المرجعية this
كلمة محجوزة تشير داخل دالة الكائن التقليدية إلى الكائن الذي استُدعيت الدالة من خلاله.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 ES2022 ES2022
ECMAScript 2022 Standard
الإصدار القياسي الذي اعتمد الدالة الآمنة Object.hasOwn() لفحص خصائص الكائنات.
للمراجعة
02 OTP OTP
One-Time Password
رمز تحقق مؤقت لمرة واحدة يُحذف عادةً من كائن الجلسة بالمعامل delete فور انتهاء الحاجة إليه.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال حساب الفاتورة في محرر التجربة وغيّر قيمة discount من 30 إلى 50 وتحقق من تحديث النتيجة.

  2. افحص التبويب الأول في المحاكي لمشاهدة كيف تميز Object.hasOwn بين الخصائص الذاتية والموروثة.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

أي تعليمة تزيل المفتاح "temp" نهائياً من الكائن const data = { id: 1, temp: 99 }؟

02

ما الدالة الحديثة الآمنة لفحص هل "role" خاصية ذاتية مباشرة في الكائن user دون شمول الموروثات؟

03

تقييم التعبير "toString" in {} يرجع true لأن الكائنات العادية ترث دالة toString تلقائياً.

04

في الكائن const item = { a: 10, b: 20, c: 30 }، ما ناتج كل من item.length وObject.keys(item).length؟

05

داخل دالة كائن مستدعاة عبر account.reset()، إلامَ تشير الكلمة المحجوزة this؟

06

يمكن إضافة خاصية جديدة لكائن موجود في JavaScript بمجرد إسناد قيمة مثل obj.newField = 42.

07

إسناد obj.token = undefined يحذف اسم المفتاح "token" من قائمة Object.keys(obj).

08

إذا كان const cfg = { retry: undefined }، فماذا ترجع الدالة Object.hasOwn(cfg, "retry")؟

09

ماذا نسمي السلوك التنفيذي المعرف كخاصية داخل الكائن في JavaScript؟

10

فحص المفاتيح القادمة من المستخدم عبر Object.hasOwn() يمنع مطابقة الخصائص الموروثة مثل "valueOf" و"toString".