الدالة 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;
}
}ما الذي يحدث هنا:
constructor(name, department)- يحتاج Manager إلى كل من name و departmentsuper(name)- يمررnameإلى constructor الخاص بـ Employee
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).
التحدي
بفرض وجود فئة Salad التي ترث من Meal. يجب أن تحتوي الـ Salad على كل من name و ingredients.
مهمتك هي إكمال مُنشئ (constructor) الفئة Salad من خلال:
- استدعاء
super()مع الخاصية name - تعيين الخاصية
ingredients
جرّب بنفسك
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"]يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circleإعادة التعريف ودالة المساحةعداد الأشكال Static