不用if语句根据条件执行不同的函数
Execute different functions based on conditions without if statements
有没有更好的approach/coding风格在不同条件下执行不同的功能而不使用if语句?
我在 JavaScript 中按以下方式编码:(例如,不同条件下的函数可能使用 API 中的不同提取方法)
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
会很难测试
您使用键指向函数标识符。你最好使用键指向函数:
conditions:{
a: () => {
// body of foo
},
b: () => {
// body of bar
},
c: () => {
// body of foo_2
},
d: () => {
// body of bar_2
}
}
conditions[ your_key ]();
是的,您可以使用函数构建条件对象并调用它们:
function foo(){...}
function bar(){...}
var conditions : {
'a': foo,
'b': bar,
}
conditions[answer]()
注意:尽量不要使用 eval
如果您不知道自己在做什么,可能会存在安全风险
您可以定义对函数的引用或在每个条件下执行
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]()
有没有更好的approach/coding风格在不同条件下执行不同的功能而不使用if语句?
我在 JavaScript 中按以下方式编码:(例如,不同条件下的函数可能使用 API 中的不同提取方法)
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
会很难测试
您使用键指向函数标识符。你最好使用键指向函数:
conditions:{
a: () => {
// body of foo
},
b: () => {
// body of bar
},
c: () => {
// body of foo_2
},
d: () => {
// body of bar_2
}
}
conditions[ your_key ]();
是的,您可以使用函数构建条件对象并调用它们:
function foo(){...}
function bar(){...}
var conditions : {
'a': foo,
'b': bar,
}
conditions[answer]()
注意:尽量不要使用 eval
如果您不知道自己在做什么,可能会存在安全风险
您可以定义对函数的引用或在每个条件下执行
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]()