מילת המפתח extends
משמשת בהצהרות או בביטויים לכיתה כדי ליצור
מחלקה שמשמשת כמחלקה משנית של מחלקה אחרת, עם המחלקה ההורה (לפעמים
שנקרא 'סיווג הבסיס', משמש כאב הטיפוס של כיתת הצאצא (לפעמים)
שנקרא 'מחלקה משנית' או "סיווג נגזר").
class ParentClass {}
class ChildClass extends ParentClass {}
Object.getPrototypeOf( ChildClass );
> class ParentClass {}
מחלקות המשנה האלה מקבלות בירושה את המאפיינים והשיטות של המחלקה ההורה. הזה מאפשרת להרחיב את הפונקציונליות העיקרית של כיתה כדי להציג מודעות ספציפיות יותר מבלי להעמיס על כיתת ההורה שמתאימה לכל תרחיש לדוגמה אפשרי, או הטמעה מחדש של קוד שמיועד למטרה דומה.
כיתות צאצא יכולות לספק הטמעות משלהן של השיטות שעברו בירושה מכיתת הורה:
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
classMethod() {
console.log( `The value was '${ this.instanceProp }.'`)
}
}
class ChildClass extends MyClass {
classMethod() {
console.log( `The value was '${ this.instanceProp },' and its type was '${ typeof this.instanceProp }.'`)
}
}
const myParentClassInstance = new MyClass( "My string." );
const mySubclassInstance = new ChildClass( 100 );
myParentClassInstance.classMethod();
> "The value type was 'string.'"
mySubclassInstance.classMethod();
> "The value was '100,' and its type was 'number.'"
אתם יכולים גם לקרוא ל-methods שמוגדרות בכיתת ההורה בהקשר של
כיתה של צאצא משתמשת ב-super
:
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
classMethod() {
console.log( `The value was '${ this.instanceProp }.'`)
}
}
class ChildClass extends MyClass {
subclassMethod() {
super.classMethod();
console.log( `The value type was '${ typeof this.instanceProp }.'`)
}
}
const mySubclassInstance = new ChildClass( 100 );
mySubclassInstance.subclassMethod();
> The value was '100.'
> The value type was 'number.'
כמו בדוגמאות הקודמות, כשמשמיטים את השיטה constructor()
ההקשר של מחלקה צאצא, ה-constructor המשתמע של JavaScript קורא להורה
וגם את אותה קבוצת ארגומנטים. אבל אם יש
ב-constructor של המחלקה המשנית, הוא צריך קודם לקרוא ל-super()
, יחד עם
את הארגומנטים הדרושים לפני הפניה אל this
.
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
classMethod() {
console.log( `The value was '${ this.instanceProp }.'`)
}
}
class ChildClass extends MyClass {
constructor( myPassedValue ) {
super( myPassedValue );
this.modifiedProp = myPassedValue + 50;
}\
subclassMethod() {
super.classMethod();
console.log( `The value type was '${ typeof this.instanceProp }.'`)
}
}
const mySubclassInstance = new ChildClass( 100 );
mySubclassInstance;
> MyClass { instanceProp: 100, modifiedProp: 150 }
מאחזרים וקובעים הם שיטות מיוחדות שמשמשות רק לאחזור ולהגדיר
בהתאמה, השיטות שהוגדרו באמצעות מילות המפתח get
ו-set
מאפשרות
אתם יוצרים שיטות שאפשר לתקשר איתן כאילו הן סטטיות
נכסים.
class MyClass {
constructor( originalValue ) {
this.totalValue = 0;
}
set doubleThisValue( newValue ) {
this.totalValue = newValue * 2;
}
get currentValue() {
console.log( `The current value is: ${ this.totalValue }` );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { totalValue: 0 }
myClassInstance.doubleThisValue = 20;
myClassInstance.currentValue;
> The current value is: 40
המאפיינים get
ו-set
מוגדרים במאפיין אב הטיפוס של המחלקה,
ולכן הן זמינות לכל המופעים של המחלקה.
בדיקת ההבנה
צריך לבחור את ההצהרות הנכונות לגבי כיתות שנוצרו באמצעות מילת המפתח extends
.
It can't overwrite methods from a parent class.