根据条件执行不同的函数而不使用if语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据条件执行不同的函数而不使用if语句相关的知识,希望对你有一定的参考价值。
是否有更好的方法/编码风格在不使用if语句的情况下在不同条件下执行不同的函数?
我在javascript中使用以下方式进行编码:(例如,不同条件下的函数可能使用API中的不同fetch方法)
if(answer == 'a'){
foo()
if(answer == 'b'){
bar()
if(answer == 'c'){
bar_2()
if(answer == 'd'){
foo_3()
我曾想过使用eval()
,但这是一个好方法吗?例如,创建对象由作为条件的键和作为属性的函数名组成。
conditions:{
a: 'foo',
b: 'bar',
c: 'foo_2',
d: 'bar_2',
}
像eval(this.conditions[a])
一样运行它
但我也听说使用eval
很难进行测试。
答案
是的,您可以使用该函数构建条件对象并调用它们:
function foo(){...}
function bar(){...}
var conditions : {
'a': foo,
'b': bar,
}
conditions[answer]()
注意:如果您不知道自己在做什么,请尽量不要使用eval
它有安全隐患
另一答案
您使用键指向功能标识符。你最好用key来指向函数:
conditions:{
a: () => {
// body of foo
},
b: () => {
// body of bar
},
c: () => {
// body of foo_2
},
d: () => {
// body of bar_2
}
}
conditions[ your_key ]();
另一答案
您可以定义对函数的引用或在每个条件下执行
const doSomething = (args) => {
// do something
}
const doSomethingElse = (args) => {
// do something else
}
const conditions = {
a: doSomething,
b: doSomethingElse
};
// and then
const result = conditions[answer](params);
甚至是功能参考列表
const conditions = {
a: [
doSomething,
],
b: [
doSomething,
doSomethingElse
]
};
// and then
const results = conditions[ answer ].map(method => method());
另一答案
你可以创建这样的函数:
this['some answer'] = function() {...}
然后称之为
this[answer]()
以上是关于根据条件执行不同的函数而不使用if语句的主要内容,如果未能解决你的问题,请参考以下文章