Javascript 访问在任意超类中声明的属性

Javascript 访问在任意超类中声明的属性,javascript,class,inheritance,ecmascript-6,Javascript,Class,Inheritance,Ecmascript 6,在JavaScript中,要访问在直接父类中声明的(非静态)属性getter或setter,我们都应该知道,我们可以使用super:例如foo=super.bar或super.foo=bar 访问超类(或下一父类以外的超类)中声明的重写属性的正确方法是什么 到目前为止,我找到的最佳解决方案是使用Relect.get。当然可以,但它很难看,看起来像黑客。我希望你能理解我的感受 A类{ getfoo(){ console.log('evaluation A.foo'); 归还这个; }; } B类

在JavaScript中,要访问在直接父类中声明的(非静态)属性getter或setter,我们都应该知道,我们可以使用
super
:例如
foo=super.bar
super.foo=bar

访问超类(或下一父类以外的超类)中声明的重写属性的正确方法是什么

到目前为止,我找到的最佳解决方案是使用
Relect.get
。当然可以,但它很难看,看起来像黑客。我希望你能理解我的感受

A类{
getfoo(){
console.log('evaluation A.foo');
归还这个;
};
}
B类扩展了A类{
getfoo(){
console.log('evaluation B.foo');
把这个还给我;
};
}
C类扩展到B类{
getfoo(){
//我们能做得更好吗?
返回Reflect.get(A.prototype'foo',this);
}
}
常数c=新的c;
c、 a=‘好’;
c、 b=‘不正常’;

console.log(c.foo)我不认为它会变得更优雅/更简单。JavaScript中没有
super.super
或类似内容


您可以通过
getPrototypeOf
来遍历原型链(虽然这样做并不完全是
super
所做的,
super
使用方法的
[[HomeObject]]
的原型),但这不会变得不那么复杂或更优雅。:-)更灵活(例如,不是硬编码到
A
),但也不是更优雅。

确实需要这样做会暴露出类层次结构的一个重大问题?@T.J.Crowder我想是的。我只是想知道我是否忽略了任何可以用来实现这一点的语言特性。完全合理。规范中有很多隐藏的宝石(还有一些隐藏的…非宝石…)。
Reflect.get
绝对是其中一个宝石,很好地发现了。