TLDR ; Comment appeler directement le setter de la classe parent d'un objet sans invoquer le setter de l'enfant en dehors de la classe parent et de la classe enfant ?
Je sais que, si la solution existe, elle peut être très difficile à mettre en œuvre ou relever de la magie, mais cela ne me dérange pas. Voici le scénario :
-
Parent
est une classe provenant d'une bibliothèque tierce, je ne peux donc pas modifier ce code. -
Child
est une classe de ma base de code, mais j'aimerais garder le code magique en dehors d'elle, car la classeProp
peut être utilisée avec différents "Child
Les classes ". -
Prop
est la classe dans laquelle le code magique peut résider si nécessaire.
J'ai besoin d'accéder au Parent
L'ensemble de l'équipe de l'UE de l'année dernière a été sélectionné par l'équipe de l'année dernière. x
par l'intermédiaire d'un Child
sans invoquer le setter de l'objet x
de la Child
.
Est-ce possible ?
class Parent {
constructor() {
this._x = 255;
}
set x(v) {
console.log("Calling Parent setter");
this._x = v;
}
get x() {
console.log("Calling Parent getter");
return this._x;
}
}
class Child extends Parent {
constructor() {
super();
this.prop = new Prop(this);
}
set x(v) {
console.log("AVOID! Calling Child setter");
super.x = v;
// Shennanigans I don't want to run
}
get x() {
console.log("Calling Child getter");
return super.x;
}
}
class Prop {
constructor(child) {
this.child = child;
}
setX() {
const parent = this.child; // Not sure what to do here.
const old = parent.x;
parent.x = 0;
console.log(`parent.x changed from ${old} to ${parent.x}`);
}
}
const child = new Child();
child.prop.setX();