下面的代码只是初始化两个变量,具体取决于传递的cloudType,可以通过两种方法之一进行分配。在JavaScript中,建议减少代码行的数量,因此我喜欢第二种方法,它也消除了重复。
一种方法使我可以在将来需要时在特定情况下灵活地添加操作,其中第二种方法为我节省了大量字节,也有助于减少重复。
switch (cloudType) {
case "aws":
value = this._resetMessageDefaultValues.aws
resetText = this._messages.current.aws
break;
case "private":
value = this._resetMessageDefaultValues.private;
resetText = this._messages.current.private
break;
case "azure":
value = this._resetMessageDefaultValues.azure;
resetText = this._messages.current.azure
break;
}
或
value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType]
答案 0 :(得分:6)
无论如何,我更喜欢第二个代码。
如果您的cloudType
变量具有到其他两个对象的属性的一对一映射,为什么不弄清楚呢?这样也可以避免重复代码。
为了安全起见,请将以下检查添加到您的代码中:
value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType]
if (typeof value == "undefined" || typeof resetText == "undefined") {
// throw some error
}
通过这种方式,您将知道在向系统中添加新的cloudType
时,应将相关属性添加到其他对象中。
答案 1 :(得分:1)
放大@Mohammad的答案
第二个代码已经成为行业标准,即通过方括号foo['bar']
通过其键来引用对象属性。如果要添加其他操作,只需将其放在下面的开关盒中。仍然比您编写的第一个解决方案节省了几个字节
value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType];
switch (cloudType) {
case "aws": break;
case "private": break;
case "azure": break;
}
考虑到键确实与cloudType
变量直接匹配,即使不是,我也建议将其匹配。