⊗jsOpIhPPP 36 of 60 menu

Privačių savybių paveldėjimo problema OOP JavaScripte

Tai, kad privačios savybės nepaveldimos, gali sukelti netikėtą problemą. Pažiūrėkime pavyzdžiu. Tarkime, kad turime šį tėvinę klasę su privačia savybe:

class User { #age; setAge(age) { this.#age = age; } getAge() { return this.#age; } }

Tarkime, kad vaikinėje klasėje nusprendėme sukurti metodą, kuris padidins amžių vienetu. Tačiau bandymas pakeisti tėvinę privačią savybę sukels klaidą:

class Student extends User { incAge() { this.#age++; // klaida } }

Klaida išnyks, jei vaikinėje klasėje deklaruosite privačią savybę #age:

class Student extends User { #age; incAge() { this.#age++; } }

Štai čia mūsų ir laukia spastai! Iš tiesų mes sukūrėme dvi privačias savybes: vieną tėvinėje klasėje ir vieną vaikinėje. Ir jos veikia visiškai nepriklausomai. Tai reiškia, kad tėviniai metodai keis savo savybę, o vaikiniai metodai - savo.

Ši problema iš tikrųjų turi sprendimą. Tiesiog reikia manipuliuoti tėvinėmis privačiomis savybėmis per tos tėvinės klasės metodus. Perrašykime mūsų kodą pagal tai:

class Student extends User { incAge() { let age = this.getAge(); age++; this.setAge(age); } }

Galima supaprastinti:

class Student extends User { incAge() { this.setAge(++this.getAge()); } }

Toliau pateiktame kode vaikinėje klasėje perrašomas tėvinis metodas. Ištaisykite problemas šiame kode:

class User { #name; setName(name) { this.#name = name; } getName() { return this.#name; } } class Employee extends User { setName(name) { if (name.length > 0) { this.#name = name; } } }
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti