用更好的模式(Javascript)替换开关

用更好的模式(Javascript)替换开关,javascript,design-patterns,Javascript,Design Patterns,我必须升级我的应用程序以根据用户类型和角色属性显示页面。目前,我根据用户类型使用一个简单的switch语句来实现这一点,例如 switch(type) { case 'a': return CONSTANT.ONE; case 'b': return CONSTANT.TWO; default: return null; } 该开关只返回一个常量字符串,该字符串指示视图showm,但不能随着类型、角色数量的增加而扩展。在这种情况下,谁能提出一个好的模式来

我必须升级我的应用程序以根据用户类型和角色属性显示页面。目前,我根据用户类型使用一个简单的switch语句来实现这一点,例如

switch(type) {
  case 'a':
    return CONSTANT.ONE;

  case 'b':
    return CONSTANT.TWO;

  default:
    return null;
}
该开关只返回一个常量字符串,该字符串指示视图showm,但不能随着类型、角色数量的增加而扩展。在这种情况下,谁能提出一个好的模式来使用呢。我认为状态模式可能是好的,但是仅仅为了返回一个字符串,它就超出了顶部了吗


谢谢

使用对象作为查找:

var roles = {};
然后,您可以添加如下角色:

roles['a']=CONSTANT.ONE;
var xxx = roles['a'];
然后像这样查找它们:

roles['a']=CONSTANT.ONE;
var xxx = roles['a'];

通过这种方式,您可以在代码中的不同位置向角色添加内容,这与@MarkusJarderot非常相似,但在行为上有一些重要差异,我将使用:

var mapping = {
    'a': CONSTANT.ONE,
    'b': CONSTANT.TWO,
    '_default': null
};

return mapping.hasOwnProperty(type) ? mapping[type] : mapping["_default"];

mapping[type]
的值为falsy时,仍将返回该值,而不是返回到
null
备选值。当其中一个值为
0
或空字符串时,这将非常有用。

这可能应该启用。您可以将其保留在数组中,并按当前的
大小写进行索引value@SpencerWieczorek-这是示例代码,因此不适合于代码审查。@SpencerWieczorek不,不应该。示例代码与代码审阅无关。“hasOwnProperty”检查对于防止返回继承的属性也很重要。(例如,如果
类型
为“toString”)