Javascript 如何在子类中带有“super”的超类上调用箭头函数

Javascript 如何在子类中带有“super”的超类上调用箭头函数,javascript,class,inheritance,ecmascript-6,super,Javascript,Class,Inheritance,Ecmascript 6,Super,似乎无法在子类中使用super.methodName()调用超类箭头函数: 类父类{ 构造函数(){ console.log('in`Parent`constructor') } 父箭头=()=>{ console.log('parentArrowFn') } 父方法(){ console.log('parentMethod') } } 类子级扩展父级{ 构造函数(){ 超级() console.log('in`Child`constructor') } childMethod(){ cons

似乎无法在子类中使用
super.methodName()
调用超类箭头函数:

类父类{
构造函数(){
console.log('in`Parent`constructor')
}
父箭头=()=>{
console.log('parentArrowFn')
}
父方法(){
console.log('parentMethod')
}
}
类子级扩展父级{
构造函数(){
超级()
console.log('in`Child`constructor')
}
childMethod(){
console.log('childMethod')
super.parentMethod()//有效
super.parentArrow()//错误
}
}
(新建子对象()).childMethod()es6类中的公共字段或“类实例字段”在所有环境中都不受本机支持,即使是这样,您也需要通过
引用而不是
超级
调用它,因为它将成为实例属性而不是原型上的属性:

类父类{
构造函数(){
console.log('in`Parent`constructor')
}   
父箭头=()=>{
console.log('parentArrowFn')
}
父方法(){
console.log('parentMethod')
}
}
类子级扩展父级{
构造函数(){
超级()
console.log('in`Child`constructor')
}
childMethod(){
console.log('childMethod')
super.parentMethod()//有效
this.parentArrow()//调用parentArrow
} 
}
new Child().childMethod()es6类中的公共字段或“类实例字段”在所有环境中都不受本机支持,即使是这样,您也需要通过
引用而不是
超级
调用它,因为它将成为实例属性而不是原型上的属性:

类父类{
构造函数(){
console.log('in`Parent`constructor')
}   
父箭头=()=>{
console.log('parentArrowFn')
}
父方法(){
console.log('parentMethod')
}
}
类子级扩展父级{
构造函数(){
超级()
console.log('in`Child`constructor')
}
childMethod(){
console.log('childMethod')
super.parentMethod()//有效
this.parentArrow()//调用parentArrow
} 
}

new Child().childMethod()
您必须使用
super
还是
这也是一个选项?(它与
)为什么需要
超级
?如果您使用
this.
来代替,这两个示例都能正常工作。另外,在方法中使用箭头函数是不常见的,因为它们将无法使用
this
@KevinB,我不知道这一点。如果答案是肯定的,那么可能会将其标记为重复?@Barmar我使用带有transform class properties插件的箭头函数,以避免在react类的构造函数中绑定方法。我认为这很常见,不是吗?你必须使用
super
还是
this
也是一个选项?(它与
)为什么需要
超级
?如果您使用
this.
来代替,这两个示例都能正常工作。另外,在方法中使用箭头函数是不常见的,因为它们将无法使用
this
@KevinB,我不知道这一点。如果答案是肯定的,那么可能会将其标记为重复?@Barmar我使用带有transform class properties插件的箭头函数,以避免在react类的构造函数中绑定方法。我认为这很常见,不是吗?因为直到子构造函数没有完全完成,parentArrow属性才被定义。错了!根据建议,类字段在构造函数中的代码运行之前运行。此外,这不是一个时间问题,因为childMethod是在构建完成后调用的finished@JonasWilms重新措辞并更正了我的答案。因为在子构造函数未完全完成之前,不会定义parentArrow属性。错了!根据建议,类字段在构造函数中的代码运行之前运行。此外,这不是一个时间问题,因为childMethod是在构建完成后调用的finished@JonasWilms重新措辞并更正了我的回答。