Szeretnék hozzáférni az alaposztály privát mezőihez a származtatott osztályokból anélkül, hogy nyilvánossá tenném őket (amit más nyelvekben „védettnek” neveznek).
Vegye figyelembe a következő osztályt:
class Animal {
#privateProp;
constructor() {
this.#privateProp = 12;
}
}
Most a bővítő osztály:
class Cat extends Animal {
constructor() {
super();
}
doIt() {
console.log(this.#privateProp) // 1 below
console.log(super.#privateProp) // 2 below
}
}
Úgy szeretném végrehajtani, mintha védett lenne:
new Cat().doIt();
De megkapja (illetve):
- Nem elkapott szintaxishiba: A „#privateProp” privát mezőt egy bezáró osztályban kell deklarálni
- Uncaught Syntax Error: Váratlan privát mező
Figyeljük meg, hogy ez a kód tökéletesen működne, amikor a privateProp nyilvánossá válik, de szeretnék elérni egy védett viselkedést, és hozzáférést szeretnék elérni a „privát” mezőkhöz, mint bármely nyelv, amely támogatja az öröklődést.
Minden segítséget nagyra értékelünk.
console.log(cat.Prop); cat.Prop = 22
) mutatja. Nem korlátozódik a gyermekosztályokon belüli kódra. 22.07.2020Prop
védett tulajdonához férsz hozzá, hanem a gyerekProp
köztulajdonához. Csak úgy megtartottam, ahogy a szülőben volt. A gyermekben az OP dönthet úgy, hogy a getter és a setter ne adja vissza pontosan a szülő kelléket. ez lehetreturn super.Prop+1
; vagy esetleg csak módszerben használjuk. 22.07.2020Reflect.get(Animal.prototype, "Prop", cat)
esetén) 22.07.2020