⊗jsOpIhPPP 36 of 60 menu

Problemet med privata egenskaper vid arv i OOP i JavaScript

Att privata egenskaper inte ärvs kan leda till ett oväntat problem. Låt oss titta på ett exempel. Antag att vi har följande föräldraklass med en privat egenskap:

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

Antag att vi i barnklassen bestämmer oss för att skapa en metod som kommer att öka åldern med ett. Försöket att ändra förälderns privata egenskap kommer dock att leda till ett fel:

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

Felet försvinner om man i barnklassen deklarerar den privata egenskapen #age:

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

Det är här fällan väntar på oss! I verkligheten har vi skapat två privata egenskaper: en i föräldern och en i barnet. Och de fungerar helt oberoende. Det betyder att förälderns metoder kommer att ändra sin egen egenskap, och barnets metoder - sina egna.

Detta problem har faktiskt en lösning. Man behöver bara manipulera förälderns privata egenskaper genom förälderns metoder. Låt oss skriva om vår kod i enlighet med detta:

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

Kan förenklas:

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

I följande kod i barnklassen åsidosätts föräldermetoden. Rätta problemen i denna kod:

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; } } }
Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa