کلمه کلیدی extends
در اعلانها یا عبارات کلاس برای ایجاد کلاسی استفاده میشود که بهعنوان زیر کلاس دیگری عمل میکند، با کلاس والد (که گاهی اوقات "کلاس پایه" نامیده میشود) به عنوان نمونه اولیه کلاس فرزند (که گاهی اوقات "subclass" نامیده میشود. یا "کلاس مشتق شده").
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.'"
همچنین می توانید متدهای تعریف شده در کلاس والد را در زمینه کلاس فرزند با استفاده از 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()
در زمینه کلاس فرزند حذف می شود، سازنده ضمنی جاوا اسکریپت سازنده والد را همراه با همان مجموعه آرگومان ها فراخوانی می کند. با این حال، اگر سازنده ای در زیر کلاس وجود داشته باشد، باید ابتدا 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.