在这里问了几个问题并确认js没有通过引用,只有值,问题变成了,你如何做出动态决策。让我解释。现在,我正在创建一个复杂形式的许多switch语句。但是我想创建一个包含许多对象的数组,这些对象包含要满足的条件以及要执行的变量或函数。我现在实现这一目的的方法是用纯文本命名变量并在括号中执行它,如下所示:this [nameofvar] = false其中' nameofvar'是数组对象中的字符串存储。这对我来说在很多层次上都很糟糕而且很黑。
那你怎么做的?
答案 0 :(得分:1)
您可以考虑用对象文字替换switch语句。看看Todd motto写的这个例子,取自他的article on this concept - 我觉得这很有用,我更喜欢这样做复杂的条件逻辑。
注意方法的调用方式:
(obj[key] || obj['default'])();
即,使用密钥定义的方法(如果存在),或者回退到默认值。因此,调用两者的第一个真值(func)();
。
function getDrink (type) {
var drink;
var drinks = {
'coke': function () {
drink = 'Coke';
},
'pepsi': function () {
drink = 'Pepsi';
},
'lemonade': function () {
drink = 'Lemonade';
},
'default': function () {
drink = 'Default item';
}
};
// invoke it
(drinks[type] || drinks['default'])();
// return a String with chosen drink
return 'The drink I chose was ' + drink;
}
var drink = getDrink('coke');
// The drink I chose was Coke
console.log(drink);