⊗jsOpIhPPP 36 of 60 menu

A privát tulajdonságok öröklődésének problémája az OOP-ben JavaScriptben

Az, hogy a privát tulajdonságok nem öröklődnek, váratlan problémához vezethet. Nézzük ezt egy példán keresztül. Legyen egy szülő osztályunk egy privát tulajdonsággal:

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

Tegyük fel, hogy a gyermek osztályban el akarunk készíteni egy metódust, amely eggyel növeli a kort. Mindazonáltal, a szülő privát tulajdonságának megváltoztatása hibához vezet:

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

A hiba eltűnik, ha a gyermek osztályban deklaráljuk a #age privát tulajdonságot:

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

Itt lesújt ránk a csapda! Valójában két privát tulajdonságot hoztunk létre: egyet a szülőben és egyet a gyermekben. És ezek teljesen függetlenül működnek. Ez azt jelenti, hogy a szülő metódusai a saját tulajdonságukat módosítják, a gyermek metódusai pedig - a sajátjaikat.

Ennek a problémának valójában van megoldása. Egyszerűen a szülő privát tulajdonságaival a szülő metódusain keresztül kell manipulálni. Írjuk át a kódunkat ennek megfelelően:

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

Le lehet egyszerűsíteni:

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

A következő kódban a gyermek osztályban ádefiniálják a szülő metódusát. Javítsa a kód problémáit:

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; } } }
Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás