⊗jsOpIhPPP 36 of 60 menu

Težava z zasebnimi lastnostmi pri dedovanju v OOP v JavaScriptu

Dejstvo, da zasebne lastnosti niso podedovane, lahko vodi do nepričakovane težave. Poglejmo si primer. Recimo, da imamo naslednji starševski razred z zasebno lastnostjo:

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

Recimo, da smo v podrejenem razredu odločili narediti metodo, ki bo povečala starost za ena. Vendar, poskus spreminjanja zasebne lastnosti starša bo povzročil napako:

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

Napaka bo izginila, če v podrejenem razredu deklariramo zasebno lastnost #age:

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

Tu nas čaka past! V resnici smo ustvarili dve zasebni lastnosti: eno v staršu in eno v potomcu. In delujeta povsem neodvisno. To pomeni, da bodo metode starša spreminjale svojo lastnost, metode potomca pa svojo.

Ta problem ima pravzaprav rešitev. Preprosto je treba manipulirati z zasebnimi lastnostmi starša prek metod tega starša. Prepišimo našo kodo v skladu s tem:

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

Lahko poenostavimo:

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

V naslednji kodi se v podrejenem razredu prepiše metoda starša. Popravite težave v tej kodi:

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; } } }
Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni