⊗jsOpIhPPP 36 of 60 menu

Problem prywatnych właściwości przy dziedziczeniu w OOP w JavaScript

To, że prywatne właściwości nie są dziedziczone, może prowadzić do nieoczekiwanego problemu. Spójrzmy na przykład. Załóżmy, że mamy następującą klasę nadrzędną z prywatną właściwością:

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

Załóżmy, że w klasie potomnej chcieliśmy stworzyć metodę, która będzie zwiększać wiek o jeden. Jednakże, próba zmiany prywatnej właściwości rodzica zakończy się błędem:

class Student extends User { incAge() { this.#age++; // błąd } }

Błąd zniknie, jeśli w klasie potomnej zadeklarujemy prywatną właściwość #age:

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

Tutaj właśnie czai się na nas pułapka! W rzeczywistości stworzyliśmy dwie prywatne właściwości: jedną w rodzicu i jedną w potomku. I działają one całkowicie niezależnie. To oznacza, że metody rodzica będą zmieniać swoją właściwość, a metody potomka - swoje.

Ten problem w rzeczywistości ma rozwiązanie. Po prostu należy manipulować prywatnymi właściwościami rodzica poprzez metody tego rodzica. Przepiszmy nasz kod zgodnie z tym:

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

Można uprościć:

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

W następnym kodzie w klasie potomka przesłaniana jest metoda rodzica. Popraw problemy w tym kodzie:

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; } } }
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć