Menu
Coddy logo textTech

המתודה super()

חלק מהיחידה תכנות מונחה עצמים במסלול ה-JavaScript של Coddy. שיעור 27 מתוך 56.

המתודה super() יוצרת ומאתחלת את האובייקט באמצעות הבנאי של מחלקת האב. חובה לקרוא לה לפני שאפשר להוסיף מאפיינים כלשהם למחלקת הבת.

חשוב על זה כך: מחלקת האב בונה את היסודות של האובייקט, ו־super() אומרת "בנה תחילה את היסודות האלה" לפני שמחלקת הבת מוסיפה תכונות משלה.

בואו נסתכל על הדוגמה. צרו מחלקת אב:

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

כעת צרו מחלקת בת שמרחיבה את מחלקת האב:

class Manager extends Employee {
  constructor(name, department) {
    super(name); // קרא לבנאי של מחלקת האב עם name
    this.department = department;
  }
}

מה קורה כאן:

  1. constructor(name, department) - Manager צריך גם שם וגם מחלקה
  2. super(name) - מעביר את name לבנאי של 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 בבנאי של מחלקה נגזרת. אם לא תקרא למתודה super(), JavaScript תזרוק שגיאת הפניה.

challenge icon

אתגר

בהינתן מחלקת Salad שמרחיבה את Meal. לסלט צריכים להיות גם שם וגם מרכיבים.

המשימה שלך היא להשלים את הבנאי של מחלקת Salad על ידי:

  1. קריאה ל־super() עם מאפיין השם
  2. הגדרת המאפיין 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"]
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר JavaScript אונליין