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

时间:2015-02-04 20:08:50

标签: javascript design-patterns

我必须升级我的应用以根据用户类型和角色属性显示页面。目前,我使用一个简单的switch语句来根据用户类型执行此操作,例如

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

  case 'b':
    return CONSTANT.TWO;

  default:
    return null;
}

交换机只返回一个指示视图showm的常量字符串,但是随着类型数量的增加,角色也不会增加。任何人都可以建议在这种情况下使用一个好的模式。我认为一个状态模式可能是好的但是在顶部只是为了返回一个字符串?

由于

2 个答案:

答案 0 :(得分:2)

与@MarkusJarderot非常相似,但在行为方面存在一些重要差异,我会使用:

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

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

mapping[type]的值为假时,这仍然会返回它,而不是转到null替代方案。当您的某个值为0或空字符串时,这将非常有用。

答案 1 :(得分:0)

使用对象作为查找:

var roles = {};

然后你可以添加这样的角色:

roles['a']=CONSTANT.ONE;

并按照这样查看:

var xxx = roles['a'];

通过这种方式,您可以在代码的不同位置向角色添加内容