⊗jsOpIhPPP 36 of 60 menu

Problemet med private egenskaper ved arv i OOP i JavaScript

Det at private egenskaper ikke arves, kan føre til et uventet problem. La oss se på et eksempel. La oss si at vi har følgende foreldreklasse med en privat egenskap:

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

La oss si at i barneklassen ønsker vi å lage en metode som vil øke alderen med én. Imidlertid vil forsøket på å endre den private egenskapen til forelderen føre til en feil:

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

Feilen forsvinner hvis du i barneklassen deklarerer den private egenskapen #age:

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

Det er her fellen venter på oss! I virkeligheten har vi skapt to private egenskaper: én i forelderen og én i barnet. Og de fungerer helt uavhengig. Dette betyr at forelderens metoder vil endre sin egen egenskap, og barnets metoder - sine egne.

Dette problemet har faktisk en løsning. Du må bare manipulere de private egenskapene til forelderen via metodene til den forelderen. La oss omskrive koden vår i tråd med dette:

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 barneklassen overstyres forelderens metode. Rett problemene i denne koden:

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; } } }
Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis