Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الدالة super()

جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 27 من 56.

تقوم الطريقة super() بإنشاء وتهيئة الكائن باستخدام منشئ الفئة الأب. ويجب استدعاؤها قبل أن تتمكن من إضافة أي خصائص إلى الفئة التابعة.

فكر في الأمر بهذه الطريقة: تقوم الفئة الأب ببناء أساس الكائن، و super() تقول "ابنِ ذلك الأساس أولاً" قبل أن تضيف الفئة الابنة ميزاتها الخاصة.

لنلقِ نظرة على المثال. أنشئ فئة أساسية (parent class):

class Employee {
  constructor(name) {
    this.name = name;
  }
}

الآن قم بإنشاء فئة تابعة (child class) ترث من الفئة الأساسية (parent):

class Manager extends Employee {
  constructor(name, department) {
    super(name); // استدعاء منشئ الفئة الأساسية مع الاسم
    this.department = department;
  }
}

ما الذي يحدث هنا:

  1. constructor(name, department) - يحتاج Manager إلى كل من name و department
  2. super(name) - يمرر name إلى constructor الخاص بـ Employee
  1. this.department - يضبط الخاصية الفريدة للمدير (Manager)

يؤدي هذا إلى إنشاء مدير (Manager) يمتلك كلاً من الخصائص الموروثة (name) وخصائصه الخاصة (department)!

قم بإنشاء مثيل من الفئة الفرعية:

const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name);      // "Sarah"
console.log(myManager.department); // "Engineering"

يجب استدعاء الدالة super() قبل استخدام this في المُنشئ (constructor) لفئة مشتقة. إذا لم تقم باستدعاء super()، فستقوم JavaScript برمي خطأ مرجعي (reference error).

challenge icon

التحدي

بفرض وجود فئة Salad التي ترث من Meal. يجب أن تحتوي الـ Salad على كل من name و ingredients.

مهمتك هي إكمال مُنشئ (constructor) الفئة Salad من خلال:

  1. استدعاء super() مع الخاصية name
  2. تعيين الخاصية ingredients

ورقة مرجعية

تقوم الطريقة super() بإنشاء وتهيئة الكائن باستخدام منشئ الفئة الأب (parent class). يجب استدعاؤها قبل أن تتمكن من إضافة أي خصائص إلى الفئة الابن (child class).

مثال على استخدام super() في فئة ابن:

class Employee {
  constructor(name) {
    this.name = name;
  }
}

class Manager extends Employee {
  constructor(name, department) {
    super(name); // استدعاء منشئ الأب أولاً
    this.department = department; // ثم إضافة خصائص الابن
  }
}

const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name);      // "Sarah"
console.log(myManager.department); // "Engineering"

نقاط رئيسية:

  • يجب استدعاء super() قبل استخدام this في منشئ الابن
  • قم بتمرير الوسائط (arguments) اللازمة من الابن إلى منشئ الأب
  • سيقوم JavaScript برمي خطأ مرجعي (reference error) إذا لم يتم استدعاء super()

جرّب بنفسك

import { Meal } from './classes.js';
import { Salad } from './classes.js';

// كود الاختبار - لا تقم بالتعديل
const salad = new Salad("Caesar", ["lettuce", "croutons", "cheese"]);
console.log(salad.name);       // يجب أن يطبع "Caesar"
console.log(salad.ingredients); // يجب أن يطبع ["lettuce", "croutons", "cheese"]
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming