⊗jsOpIhPPP 36 of 60 menu

Die probleem van private eienskappe met oorerwing in OOP in JavaScript

Die feit dat private eienskappe nie oorgeerf word nie, kan tot 'n onverwagte probleem lei. Kom ons kyk na 'n voorbeeld. Laat ons sê ons het die volgende ouerklas met 'n private eienskap:

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

Laat ons sê in die afgeleide klas het ons besluit om 'n metode te maak wat die ouderdom met een sal vermeerder. Die poging egter om die private eienskap van die ouer te verander sal tot 'n fout lei:

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

Die fout sal verdwyn as in die afgeleide klas die private eienskap #age verklaar word:

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

Dis hier waar die strik op ons wag! Eintlik het ons twee private eienskappe geskep: een in die ouer en een in die afstammeling. En hulle werk heeltemal onafhanklik. Dit beteken dat die metodes van die ouer hulle eie eienskap sal verander, en die metodes van die afstammeling - hulle s'n.

Hierdie probleem het eintlik 'n oplossing. Mens moet net die private eienskappe van die ouer manipuleer deur die metodes van daardie ouer. Kom ons hers kry ons kode in ooreenstemming hiermee:

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

Dit kan vereenvoudig word:

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

In die volgende kode in die afgeleide klas word die metode van die ouer oorbeseem. Maak die probleme in hierdie kode reg:

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; } } }
Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp