想象一下,我在层次结构中连接了3个类Child
,Parent
和Grandparent
,如下所示:
class Grandparent {
set myField(value) {
console.log('Grandparent setter');
}
}
class Parent extends Grandparent {
set myField(value) {
console.log('Parent setter');
}
}
class Child extends Parent {
set myField(value) {
//I know how to call Parent's setter of myField:
//super.myField = value;
//But how to call Grandparent's setter of myField here?
}
}
如何在
Grandparent
类的setter中调用myField
的Child
的setter?我特别对二传手而不是方法感兴趣。另外,最好不要更改
Parent
类的Grandparent
。我看不到使用
super
怎么可能,因为它只引用Parent
类,以及使用类似Grandparent.prototype.<what?>.call(this, ...)
的东西,因为我不知道原型(prototype)中到底要调用什么。有人对此案有任何建议吗?
提前致谢!
最佳答案
您在正确的轨道上,可以使用 Object.getOwnPropertyDescriptor
访问setter方法:
Object.getOwnPropertyDescriptor(Grandparent.prototype, "myField").set.call(this, value);
不过,还有一种更简单的方法:将
Reflect.set
helper与自定义接收器一起使用:Reflect.set(Grandparent.prototype, "myField", value, this);
这还有一个优点,当
Grandparent
没有定义 setter 时,它仍然可以工作。就是说,我同意@Dinu的观点,当您需要这样做时,您的类层次结构(或您的一般设计,也许甚至不应该使用类或继承)可能存在问题。