覆盖父类实例(非静态)方法javascript

时间:2017-09-15 19:00:34

标签: javascript es6-class

我的用例是React,但这是一个JavaScript问题。

我想通过使用子类来扩展componentWillMount的功能。我怎么能做到这一点?

class Super {
    componentWillMount() {
        doStuff()
    }
}
class Sub extends Super {
    componentWillMount() {
        super() // this doesn't work
        doMoreStuff()
    }
}

2 个答案:

答案 0 :(得分:3)

使用的语法是:

super.componentWillMount()

来自mdn

  

super关键字用于调用对象父级的函数。

     

super.propsuper[expr]表达式在类和对象文字中的任何方法定义中都有效。

     

语法

super([arguments]); // calls the parent constructor.
super.functionOnParent([arguments]);

演示:

class Super {
    componentWillMount() {
        console.log('parent')
    }
}

class Sub extends Super {
    componentWillMount() {
        super.componentWillMount()
        console.log('child')
    }
}

new Sub().componentWillMount();

答案 1 :(得分:1)

来自反应文档:

  

那么继承怎么样?   在Facebook,我们在数千个组件中使用React,并且我们没有找到任何建议创建组件继承层次结构的用例。

     

道具和作曲为您提供所需的所有灵活性   以明确和安全的方式定制组件的外观和行为。   请记住,组件可以接受任意道具,包括   原始值,React元素或函数。

     

如果您想在组件之间重用非UI功能,我们   建议将其解压缩到一个单独的JavaScript模块中。该   组件可以导入它并使用该函数,对象或类,   没有扩展它。

https://facebook.github.io/react/docs/composition-vs-inheritance.html