Derslerin süresini uzat

extends anahtar kelimesi, sınıf bildirimlerinde veya ifadelerde başka bir sınıfın alt sınıfı işlevi gören bir sınıf oluşturmak için kullanılır. Üst sınıf (bazen "temel sınıf" olarak da adlandırılır), alt sınıfın (bazen "alt sınıf" veya "türetilmiş sınıf" olarak da adlandırılır) prototipi olarak işlev görür.

class ParentClass {}
class ChildClass extends ParentClass {}

Object.getPrototypeOf( ChildClass );
> class ParentClass {}

Bu alt sınıflar, üst sınıfın özelliklerini ve yöntemlerini devralır. Bu, üst sınıfı olası her kullanım durumuna uyacak şekilde aşırı yüklemeden veya benzer bir amaca hizmet eden kodu yeniden uygulamadan daha spesifik amaçlara hizmet edecek şekilde bir sınıfın temel işlevlerini genişletmenize olanak tanır.

Alt sınıflar, bir üst sınıftan devralınan yöntemlerin kendi uygulamalarını sağlayabilir:

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 kullanarak üst sınıfta tanımlanan yöntemleri alt sınıfın bağlamında da çağırabilirsiniz:

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.'

Önceki örneklerde görüldüğü gibi, constructor() yöntemi bir alt sınıf bağlamında çıkarıldığında JavaScript'in örtülü oluşturucusu, aynı bağımsız değişken grubuyla birlikte üst kurucuyu çağırır. Bununla birlikte, alt sınıfta bir kurucu varsa this öğesine başvurulmadan önce gerekli bağımsız değişkenlerle birlikte super() yöntemini çağırmalıdır.

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 }

Alıcılar ve ayarlayıcılar, sırasıyla değerleri almak ve tanımlamak için özel olarak kullanılan özel yöntemlerdir. get ve set anahtar kelimeleri kullanılarak tanımlanan yöntemler, statik mülkler gibi etkileşimde bulunabilecek yöntemler oluşturmanıza olanak tanır.

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 ve set özellikleri, sınıfın prototip özelliğinde tanımlanmıştır ve bu nedenle sınıfın tüm örneklerinde kullanılabilir.

Öğrendiklerinizi sınayın

extends anahtar kelimesiyle oluşturulan sınıflar hakkındaki doğru ifadeleri seçin.

Genişletmesi, genişletildiği sınıfın alt öğesi olarak işlev görür.
Üst sınıfının özelliklerini ve yöntemlerini devralır.
Genişletmek, genişletildiği sınıfın üst öğesi olarak işlev görür.
It can't overwrite methods from a parent class.