Dědičnost třídy JavaScript
Třídní dědičnost
Chcete-li vytvořit dědičnost třídy, použijte extends
klíčové slovo.
Třída vytvořená pomocí dědičnosti třídy dědí všechny metody z jiné třídy:
Příklad
Vytvořte třídu s názvem „Model“, která zdědí metody ze třídy „Car“:
class Car {
constructor(brand) {
this.carname =
brand;
}
present() {
return 'I have a ' + this.carname;
}
}
class Model extends Car {
constructor(brand, mod) {
super(brand);
this.model = mod;
}
show() {
return this.present() + ', it is a ' + this.model;
}
}
let myCar = new Model("Ford", "Mustang");
document.getElementById("demo").innerHTML
= myCar.show();
Metoda super()
odkazuje na nadřazenou třídu.
Voláním super()
metody v metodě konstruktoru zavoláme metodu konstruktoru rodiče a získáme přístup k vlastnostem a metodám rodiče.
Dědičnost je užitečná pro opětovnou použitelnost kódu: při vytváření nové třídy znovu použijte vlastnosti a metody existující třídy.
Getři a Setři
Třídy také umožňují používat getry a settery.
Může být chytré používat pro své vlastnosti getry a settery, zvláště pokud chcete s hodnotou udělat něco speciálního, než je vrátíte nebo než je nastavíte.
Chcete-li do třídy přidat getry a settery, použijte klíčová slova
get
a set
.
Příklad
Vytvořte getter a setter pro vlastnost "carname":
class Car {
constructor(brand) {
this.carname
= brand;
}
get cnam() {
return this.carname;
}
set cnam(x) {
this.carname = x;
}
}
let myCar = new Car("Ford");
document.getElementById("demo").innerHTML = myCar.cnam;
Poznámka: I když je getter metodou, nepoužíváte závorky, když chcete získat hodnotu vlastnosti.
Název metody getter/setter nemůže být stejný jako název vlastnosti, v tomto případě carname
.
Mnoho programátorů používá _
před názvem vlastnosti znak podtržení, aby oddělil getter/setter od skutečné vlastnosti:
Příklad
Pomocí znaku podtržítka můžete oddělit getter/setter od skutečné vlastnosti:
class Car {
constructor(brand) {
this._carname
= brand;
}
get carname() {
return this._carname;
}
set carname(x) {
this._carname = x;
}
}
let myCar = new Car("Ford");
document.getElementById("demo").innerHTML = myCar.carname;
Chcete-li použít setter , použijte stejnou syntaxi, jako když nastavujete hodnotu vlastnosti, bez závorek:
Příklad
Pomocí setteru změňte název vozu na „Volvo“:
class Car {
constructor(brand) {
this._carname
= brand;
}
get carname() {
return this._carname;
}
set carname(x) {
this._carname = x;
}
}
let myCar = new Car("Ford");
myCar.carname = "Volvo";
document.getElementById("demo").innerHTML = myCar.carname;
Zvedací zařízení
Na rozdíl od funkcí a jiných deklarací JavaScriptu nejsou deklarace tříd zvednuty.
To znamená, že před použitím musíte třídu deklarovat:
Příklad
//You cannot use the class yet.
//myCar = new Car("Ford")
//This would
raise an error.
class Car {
constructor(brand) {
this.carname = brand;
}
}
//Now you can use the class:
let myCar = new Car("Ford")
Poznámka: U jiných deklarací, jako jsou funkce, se při pokusu o použití před deklarací NEZOBRAZÍ chyba, protože výchozí chování deklarací JavaScriptu je zvedání (přesunutí deklarace na začátek).