Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗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