⊗jsOpIhPPP 36 of 60 menu

Problém privátních vlastností při dědění v OOP v JavaScriptu

To, že privátní vlastnosti nejsou děděny, může vést k nečekanému problému. Podívejme se na příklad. Předpokládejme, že máme následující rodičovskou třídu s privátní vlastností:

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

Předpokládejme, že v potomní třídě jsme se rozhodli vytvořit metodu, která bude zvyšovat věk o jednu. Avšak, pokus změnit privátní vlastnost rodiče povede k chybě:

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

Chyba zmizí, pokud v potomní třídě deklarujeme privátní vlastnost #age:

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

Tady na nás čeká past! Ve skutečnosti jsme vytvořili dva privátní vlastnosti: jednu v rodiči a jednu v potomkovi. A ty fungují zcela nezávisle. To znamená, že metody rodiče budou měnit svou vlastnost a metody potomka - své.

Tento problém má ve skutečnosti řešení. Stačí manipulovat s privátními vlastnostmi rodiče pomocí metod tohoto rodiče. Přepišme náš kód v souladu s tím:

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

Lze zjednodušit:

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

V následujícím kódu je v potomní třídě předefinován metoda rodiče. Opravte problémy v tomto kódu:

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; } } }
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout