【问题标题】:Javascript enums and abstract factoryJavascript 枚举和抽象工厂
【发布时间】: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 值的情况下合并 actionListmyEnum, 这样我就不必硬编码到 actionList fooValue 和 BarValue 中?

【问题讨论】:

  • const myEnum = Object.freeze({ fooKey: fooAction, barKey: barAction, })?你真的需要两个枚举吗?
  • @VLAZ 是的,枚举是全局的,它可以在很多情况下重复使用
  • 啊,好吧,那是有道理的。
  • 嗯,我想不出删除传递查找的好方法。它甚至不是 JavaScript 的问题,它是抽象工厂的问题——你总是有一个两级查找——工厂接收一些标识符,然后必须查找应该用标识符做什么。因此,如果您使用枚举对其进行编码,那么您将拥有其中的两个。您可以将工厂使用的枚举替换为switch,但这与以前的问题基本相同。充其量,您可以按名称自动映射,但是您必须非常严格地命名事物,您可能会失去代码的清晰度。

标签: javascript enums abstract-factory


【解决方案1】:

我正在寻找的答案是:

const actionList = {
 [myEnum.fooKey]: fooAction,
 [myEnum.barKey]: barAction
}

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多