⊗jsOpIhPPP 36 of 60 menu

Problem privatnih svojstava pri nasleđivanju u OOP u JavaScript-u

To što privatna svojstva nisu nasleđena, može dovesti do neočekivanog problema. Hajde da pogledamo na primeru. Neka imamo sledeći roditeljski klasa sa privatnim svojstvom:

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

Neka u izvedenom klasu rešimo da napravimo metod, koji će povećavati godine za jedan. Međutim, pokušaj da se izmeni privatno svojstvo roditelja dovesti će do greške:

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

Greška će nestati, ako u izvedenom klasu deklarišemo privatno svojstvo #age:

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

Tu nas i čeka zamka! U stvari, stvorili smo dva privatna svojstva: jedno u roditelju i jedno u potomku. I ona rade potpuno nezavisno. Ovo znači, da će metodi roditelja menjati svoje svojstvo, a metodi potomka - svoje.

Ovaj problem zapravo ima rešenje. Jednostavno treba manipulisati privatnim svojstvima roditelja preko metoda tog roditelja. Hajde da prepišemo naš kod u skladu sa ovim:

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

Može se pojednostaviti:

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

U sledećem kodu u izvedenom klasu redefiniše se metod roditelja. Ispravite probleme u ovom kodu:

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; } } }
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij