⊗jsOpIhPPP 36 of 60 menu

Het probleem van private eigenschappen bij overerving in OOP in JavaScript

Het feit dat private eigenschappen niet worden geërfd, kan tot een onverwacht probleem leiden. Laten we een voorbeeld bekijken. Stel dat we de volgende ouderklasse hebben met een private eigenschap:

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

Stel dat we in de subklasse een methode willen maken die de leeftijd met één verhoogt. Een poging om de private eigenschap van de ouder te wijzigen zal echter tot een fout leiden:

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

De fout verdwijnt als in de subklasse de private eigenschap #age wordt gedeclareerd:

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

Hier wacht de valstrik! In werkelijkheid hebben we twee private eigenschappen gecreëerd: één in de ouder en één in de nakomeling. En ze werken volledig onafhankelijk. Dit betekent dat methoden van de ouder hun eigen eigenschap zullen wijzigen, en methoden van de nakomeling - die van hen.

Dit probleem heeft eigenlijk een oplossing. Je moet gewoon de private eigenschappen van de ouder manipuleren via de methoden van die ouder. Laten we onze code herschrijven in overeenstemming hiermee:

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

Kan worden vereenvoudigd:

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

In de volgende code wordt in de subklasse een methode van de ouder overschreven. Herstel de problemen in deze code:

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; } } }
Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren