⊗jsOpIhPPP 36 of 60 menu

Problemet med private egenskaber ved arv i OOP i JavaScript

At private egenskaber ikke nedarves, kan føre til et uventet problem. Lad os se på et eksempel. Lad os sige, at vi har følgende forældreklasse med en privat egenskab:

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

Lad os sige, at vi i barneklassen besluttede at lave en metode, der vil forøge alderen med én. Men et forsøg på at ændre forælderens private egenskab vil føre til en fejl:

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

Fejlen forsvinder, hvis man i barneklassen deklarerer den private egenskab #age:

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

Det er her, fælden venter på os! Faktisk har vi skabt to private egenskaber: én i forælderen og én i barnet. Og de fungerer fuldstændig uafhængigt. Det betyder, at forælderens metoder vil ændre deres egen egenskab, og barnets metoder - deres egne.

Dette problem har faktisk en løsning. Man skal blot manipulere forælderens private egenskaber via forælderens metoder. Lad os omskrive vores kode i overensstemmelse hermed:

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

Kan forenkles:

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

I følgende kode i barnet overskrives forælderens metode. Ret problemerne i denne kode:

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; } } }
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis