首页 > 解决方案 > Javascript - 如何实现可覆盖的生命周期钩子

问题描述

我正在创建一个我希望扩展的类。此类允许使用可覆盖的生命周期钩子(类似于 React.js 组件)自定义功能。在基类中,这些方法什么都不做。

什么是“正确”的编码方式?

我是否应该在基类中实现这些并检查方法是否存在,例如:

class BaseClass {
    //...
    runLifeCycle() {
        if (this.lifeCycleMethodA) this.lifeCycleMethodA()
    }
    //...
}

或者我应该将它们实现为基类中的空函数?

class BaseClass {
    //...
    runLifeCycle() {
        this.lifeCycleMethodA()
    }

    lifeCycleMethodA() {
        // empty block
    }
    //...
}

更清洁的方法是什么?

标签: javascriptnode.js

解决方案


这真的取决于你,没有“正确”的方式。一些输入:

  • 如果您希望子类方法调用基类方法(就像 React 的生命周期方法一样),那么将它们排除在外就可以了。

  • 如果您希望子类方法调用基类方法,那么提供它们会使子类更简单(它们不需要保护)。

  • 如果您希望直接使用基类而不是子类,通常为它们提供无操作行为会使调用方法的代码更简单(它不需要保护)。


推荐阅读