Słowo kluczowe extends
jest używane w deklaracjach lub wyrażeniach klas do tworzenia
klasa, która działa jako podklasa innej z klasą nadrzędną (czasami
nazywanej „klasą bazową”), która jest prototypem klasy podrzędnej (czasami
podklasą, lub „klasy pochodnej”).
class ParentClass {}
class ChildClass extends ParentClass {}
Object.getPrototypeOf( ChildClass );
> class ParentClass {}
Te podklasy dziedziczą właściwości i metody klasy nadrzędnej. Ten umożliwia rozszerzenie głównej funkcjonalności klasy w taki sposób, aby były bardziej szczegółowe bez przeciążania klasy nadrzędnej, aby dopasować je do każdego możliwego przypadku użycia, lub ponowne implementowanie kodu służącego podobnemu celowi.
Klasy podrzędne mogą udostępniać własne implementacje dziedziczonych metod z klasy nadrzędnej:
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.'"
Można również wywoływać metody zdefiniowane w klasie nadrzędnej w kontekście klasy nadrzędnej
klasa podrzędna za pomocą funkcji 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.'
Jak widać w poprzednich przykładach, gdy metoda constructor()
została pominięta w
kontekst klasy podrzędnej, niejawny konstruktor JavaScript wywołuje metodę nadrzędną
z tym samym zestawem argumentów. Jeśli jednak występuje
konstruktora w podklasie, musi on najpierw wywołać funkcję super()
wraz z dowolnym
niezbędnych argumentów przed odniesieniem do 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 }
Pobieranie i ustawianie parametrów to specjalne metody używane wyłącznie do pobierania i definiowania
wartości. Metody zdefiniowane za pomocą słów kluczowych get
i set
pozwalają
tworzysz metody, z którymi można wchodzić w interakcje tak, jakby były statyczne;
usług.
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
Właściwości get
i set
są zdefiniowane w prototypowej właściwości klasy,
i dlatego są dostępne dla wszystkich instancji klasy.
Sprawdź swoją wiedzę
Wybierz stwierdzenia dotyczące zajęć utworzonych za pomocą słowa kluczowego extends
.
It can't overwrite methods from a parent class.