Javascript 访问在任意超类中声明的属性
在JavaScript中,要访问在直接父类中声明的(非静态)属性getter或setter,我们都应该知道,我们可以使用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类
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
绝对是其中一个宝石,很好地发现了。