Class inheritance ng JavaScript
Pagkakasunod-sunod ng klase
Kung gusto mong gumawa ng pagkakasunod-sunod ng klase, gamitin mo ang: extends
Pangkat:
Ang klase na nilikha sa pamamagitan ng pagkakasunod-sunod ng klase ay minamana ng lahat ng mga paraan ng ibang klase:
实例
Lumikha ng isang klase na may pangalan na "Model" na magpapangunguna sa mga paraan ng klase "Car":
class Car { constructor(brand) { this.carname = brand; } present() { return 'Mayroon akong ' + 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();
super()
method na nagtutukoy sa magulang na klase.
Sa pamamagitan ng pagtawag sa constructor method, super()
Sa mga method, tinawagan namin ang constructor method ng magulang, kung saan nakakuha kami ng akses sa mga katangian at mga method ng magulang.
Ang pagpapatuloy ay napaka-mahalaga para sa pagkakamit ng kahusayan ng pagre-reuse ng code: Magre-reuse ng mga katangian at mga method ng isang klase kapag binubuo ng bagong klase.
Getter at Setter
Ang klase ay nagbibigay-daan din sa paggamit ng getter at setter.
Ito ay lubos na matalino na gamitin ang getter at setter para sa iyong mga atributo, lalo na kapag nais mong gawin ang anumang espesyal na ginagawa sa bago at bago pa itong ibabalik o itatalaga:
Kung nais mong magdagdag ng getter at setter sa klase, gamitin ang: get
at set
Pangkat:
实例
Buwbuo ng getter at setter para sa atributo na "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;
注释:Kahit na ang getter ay isang method, huwag gumamit ng pagsasakop kapag nais mong kumuha ng halaga ng atributo.
Ang pangalan ng getter/setter ay hindi dapat magkatulad ng pangalan ng atributo, sa kasong ito ay carname
.
Maraming programer ang gumagamit ng character na underscore _ sa harap ng pangalan ng atributo upang paghihiwalay ang getter/setter at ang tunay na atributo:
实例
Maaari mong gamitin ang character na underscore para paghihiwalay ang getter/setter at ang tunay na atributo:
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;
Kung magiging gumamit ng setter, gamitin ang syntax na katulad ng pagtatalaga ng halaga ng atributo, walang pagsasakop:
实例
Gumamit ng setter upang baguhin ang pangalan ng sasakyan sa "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;
Hoisting
与函数和其他 JavaScript 声明不同,类声明不会被提升。
这意味着您必须先声明类,然后才能使用它:
实例
//您还不能使用该类。 //myCar = new Car("Ford") //This would raise an error. class Car { constructor(brand) { this.carname = brand; } } //现在您可以使用该类: let myCar = new Car("Ford")
注释:对于其他声明,如函数,在声明之前尝试使用它时不会出错,因为 JavaScript 声明的默认行为是提升(将声明移到顶部)。