【发布时间】:2020-03-28 12:45:57
【问题描述】:
最近在编写我的前端应用程序时遇到了枚举问题
const myEnum = Object.freeze({
fooKey: 'fooValue',
barKey: 'barValue',
})
然后在另一部分代码中,我想使用该枚举以抽象工厂模式执行特定操作
fooAction(){
//some-code
}
barAction(){
//some-code
}
const actionList = {
fooValue: fooAction,
barValue: barAction
}
executeAction(enumValue){
return actionList[enumValue]()
}
有什么好的方法可以在不改变 myEnum 值的情况下合并 actionList 和 myEnum,
这样我就不必硬编码到 actionList fooValue 和 BarValue 中?
【问题讨论】:
-
const myEnum = Object.freeze({ fooKey: fooAction, barKey: barAction, })?你真的需要两个枚举吗? -
@VLAZ 是的,枚举是全局的,它可以在很多情况下重复使用
-
啊,好吧,那是有道理的。
-
嗯,我想不出删除传递查找的好方法。它甚至不是 JavaScript 的问题,它是抽象工厂的问题——你总是有一个两级查找——工厂接收一些标识符,然后必须查找应该用标识符做什么。因此,如果您使用枚举对其进行编码,那么您将拥有其中的两个。您可以将工厂使用的枚举替换为
switch,但这与以前的问题基本相同。充其量,您可以按名称自动映射,但是您必须非常严格地命名事物,您可能会失去代码的清晰度。
标签: javascript enums abstract-factory