⊗jsOpIhPPP 36 of 60 menu

Problém súkromných vlastností pri dedení v OOP v JavaScripte

To, že súkromné vlastnosti nie sú dedené, môže viesť k nečakanému problému. Pozrime sa na príklad. Predpokladajme, že máme nasledujúcu rodičovskú triedu so súkromnou vlastnosťou:

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

Predpokladajme, že v potomkovej triede sme sa rozhodli vytvoriť metódu, ktorá bude zvyšovať vek o jednu. Avšak, pokus zmeniť súkromnú vlastnosť rodiča povedie k chybe:

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

Chyba zmizne, ak v potomkovej triede deklarujeme súkromnú vlastnosť #age:

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

Tu na nás číha pasca! V skutočnosti sme vytvorili dve súkromné vlastnosti: jednu v rodičovi a jednu v potomkovi. A tieto fungujú úplne nezávisle. To znamená, že metódy rodiča budú meniť svoju vlastnosť a metódy potomka - svoje.

Tento problém má v skutočnosti riešenie. Jednoducho je potrebné manipulovať súkromné vlastnosti rodiča prostredníctvom metód tohto rodiča. Prepíšme náš kód v súlade s týmto:

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

Môžeme zjednodušiť:

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

V nasledujúcom kóde je v potomkovej triede predefinovaná metóda rodiča. Opravte problémy v tomto kóde:

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; } } }
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť