TLDR; 如何直接调用对象父类的setter而不调用父类和子类之外的子setter?
我知道,如果存在解决方案,那么它可能会很hacky /类似魔术,但是我不介意。这是场景:
Parent
是第3方库中的类,所以我根本无法更改此代码。Child
是我的代码库中的一个类,但是我想将魔术代码保留在它之外,因为Prop
类可以与不同的“ Child
”类一起使用。Prop
是必要时可以放置魔术代码的类。我需要通过Parent
对象访问x
的{{1}}的设置器,而无需调用Child
的{{1}}的设置器。
有可能吗?
x
答案 0 :(得分:2)
Reflect.set
在这里为您提供帮助!它确实允许单独通过接收器:
setX() {
Reflect.set(Parent.prototype, "x", 0, this.child); // invokes the Parent.protype.x setter
}
替代方案为Object.getOwnPropertyDescriptor(Parent.prototype, "x").set.call(this.child, 0)
或仅为this.child._x = 0
(如果您不需要运行setter代码)。
因此,在可能的情况下,我建议您重新考虑您的设计。也许继承是错误的方法,您应该使用组合而不是extends Parent
:
class Child {
constructor() {
this.val = new Parent();
}
set x(v) {
… // Shenanigans
this.val.x = v;
}
get x() {
return this.val.x;
}
// (without the Prop helper class for simplicity)
setX(v) {
// without shenanigans
this.val.x = v;
}
}