⊗jsOpIhPPP 36 of 60 menu

Privāto īpašību problēma mantojumā OOP JavaScript

Tas, ka privātās īpašības nemantojas, var izraisīt negaidītu problēmu. Apskatīsim piemērā. Pieņemsim, ka mums ir šāds vecāku klase ar privātu īpašību:

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

Pieņemsim, ka bērna klasē mēs nolēmām izveidot metodi, kas palielinās vecumu par vienu. Tomēr mēģinājums mainīt vecāka privāto īpašību izraisīs kļūdu:

class Student extends User { incAge() { this.#age++; // kļūda } }

Kļūda pazudīs, ja bērna klasē deklarēsiet privāto īpašību #age:

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

Šeit mūs sagaida lamatas! Patiesībā mēs esam radījuši divas privātās īpašības: vienu vecākā un vienu bērna klasē. Un tās darbojas pilnīgi neatkarīgi. Tas nozīmē, ka vecāka metodes mainīs savu īpašību, un bērna metodes - savu.

Šai problēmai patiesībā ir risinājums. Vienkārši privātās īpašības ir jāmaina caur šī vecāka metodēm. Pārrakstīsim mūsu kodu saskaņā ar to:

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

Var vienkāršot:

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

Zemāk esošajā kodā bērna klasē tiek pārdefinēta vecāka metode. Izlabojiet problēmas šajā 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; } } }
Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt