我在IIFE中有一些代码。我有函数if (CreateNoteActivity.didClick) { // User is saving an existing note
Note anote = notes.getItem(passedNoteId);
anote.setTitle(passedTitle);
anote.setDescription(passedDescription);
} else { // User is creating a new note
notes.add(new Note(passedTitle, passedDescription));
}
,它将动态返回在IIFE中声明的变量的值。我正在寻找使用getValue()
的替代解决方案,而无需重新组织变量的数据结构。
注意 - 我试图避免将变量放在对象中(即 - 水果)。
eval()
答案 0 :(得分:4)
这个怎么样?
(function() {
var fruit = {
apple: 'Apples!!',
banana: 'Bananas!!',
cucumber: 'Cucumbers!!'
};
function getValue(key) {
return fruit[key]; //can I avoid using eval()?
}
console.log(getValue('apple')); //Apples!!
})();
答案 1 :(得分:1)
(function() {
var fruit = {
apple: 'Apples!!',
banana: 'Bananas!!',
cucumber: 'Cucumbers!!';
}
function getValue(key) {
return fruit[key]; //can I avoid using eval()?
}
console.log(getValue('apple')); //Apples!!
})();
答案 2 :(得分:1)
如果您枚举并复制所有有效的变量名称,则可以使用
(function() {
var apple = 'Apples!!',
banana = 'Bananas!!',
cucumber = 'Cucumbers!!';
function getValue(key) {
var vals = { apple: apple, banana: banana, cucumber: cucumber};
return vals[ key];
}
console.log(getValue('apple')); //Apples!!
})();
您还可以考虑通过验证参数值来清理eval
的使用:
(function() {
var apple = 'Apples!!',
banana = 'Bananas!!',
cucumber = 'Cucumbers!!';
var publicVars = ["apple", "banana", "cucumber"];
function getValue(key) {
if(publicVars.indexOf(key) < 0)
throw new Error("Invalid variable name for getValue: " + key);
return eval(key);
}
console.log(getValue('apple')); //Apples!!
})();
<小时/> 脚注:以上示例旨在最大限度地降低客户的程序维护成本。不建议使用它们设计新项目,而不是建议的“水果”对象。