Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗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