javascript - Javascript - 如何实现可覆盖的生命周期钩子
问题描述
我正在创建一个我希望扩展的类。此类允许使用可覆盖的生命周期钩子(类似于 React.js 组件)自定义功能。在基类中,这些方法什么都不做。
什么是“正确”的编码方式?
我是否应该在基类中实现这些并检查方法是否存在,例如:
class BaseClass {
//...
runLifeCycle() {
if (this.lifeCycleMethodA) this.lifeCycleMethodA()
}
//...
}
或者我应该将它们实现为基类中的空函数?
class BaseClass {
//...
runLifeCycle() {
this.lifeCycleMethodA()
}
lifeCycleMethodA() {
// empty block
}
//...
}
更清洁的方法是什么?
解决方案
这真的取决于你,没有“正确”的方式。一些输入:
如果您希望子类方法不调用基类方法(就像 React 的生命周期方法一样),那么将它们排除在外就可以了。
如果您希望子类方法调用基类方法,那么提供它们会使子类更简单(它们不需要保护)。
如果您希望直接使用基类而不是子类,通常为它们提供无操作行为会使调用方法的代码更简单(它不需要保护)。
推荐阅读
- ios - 从位置唤醒应用程序后,didFinishLaunchingWithOptions 中的 LaunchOptions 为零
- python - Python 不使用最新包
- git - 如何在 Vs 2009 的工具栏上显示 Git 扩展菜单?
- java - public static AutocompleteSessionToken newInstance() 是否返回相同的实例?
- c++ - 从 std::vector 继承的 C++ 虚拟析构函数
- c++ - 用用户定义的类型 UDT 实例化 std::atomic<>。如果UDT有虚函数的话,墨迹会失败,为什么?
- reactjs - 使用 React Jest Enzyme - 如何使用 Shallow 将构造函数对象传递给我的组件?
- wordpress - WordPress:注册和分析
- node.js - 如何让 Angular HTTP Post 等待节点 js 响应
- hyperledger-fabric - Hyperledger Fabric 中的批量更新