⊗jsOpIhPPP 36 of 60 menu

Privaatse omaduste pärimise probleem OOP-s JavaScriptis

Asjaolu, et privaatsed omadused ei pärine, võib viia ootamatu probleemini. Vaatame näidet. Olgu meil järgmine vanemaklass privaatse omadusega:

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

Oletame, et lapsklassis otsustasime teha meetodi, mis suurendab vanust ühe võrra. Siiski, katse muuta vanema privaatset omadust viib veani:

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

Viga kaob, kui lapsklassis deklareerida privaatne omadus #age:

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

Siin ootabki meid lõks! Tegelikult loome kaks privaatset omadust: üks vanemas ja üks lapses. Ja need töötavad täiesti sõltumatult. See tähendab, et vanema meetodid muudavad oma omadust ja lapse meetodid - oma omadust.

Sellel probleemil on tegelikult lahendus. Lihtsalt tuleb manipuleerida vanema privaatsete omadustega läbi selle vanema meetodite. Kirjutame oma koodi vastavalt sellele ümber:

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

Saab lihtsustada:

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

Järgmises koodis kirjutatakse lapsklassis üle vanema meetod. Parandage probleemid selles koodis:

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; } } }
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu