## 第一种
function condition(val) {
return ({
0: function() {
console.log('000');
},
1: function() {
console.log('111');
},
2: function() {
console.log('222');
}
} [val] || function() {
console.log('默认值');
})();
}
condition(); // 默认值
condition(0); // 000
第二种
function condition() {
var stats = {
1: function() {
console.log('11');
},
2: function() {
console.log('22');
},
3: function() {
console.log('33');
},
4: function() {
console.log('44');
},
5: function() {
console.log('55');
}
}
return stats
}
condition()['5']()
第三种
const actions = () => {
const fn1 = () => {
console.log('functionA')
}
const fn2 = () => {
console.log('functionB')
}
return new Map([
[{
name: 'name1',
status: 1,
off: 0
}, fn1],
[{
name: 'name2',
status: 2,
off: 1
}, fn1],
[{
name: 'name3',
status: 3,
off: 0
}, fn1],
[{
name: 'name4',
status: 4,
off: 1
}, fn1],
[{
name: 'name5',
status: 5,
off: 1
}, fn2],
])
}
const doubleVerify = (name, status) => {
let action = [...actions()].filter(([key, fn]) => key.name == name && key.status == status)
action.forEach(([key, value]) => value.call(this))
}
const treblVerify = (name, status, off) => {
let action = [...actions()].filter(([key, fn]) => key.name == name && key.status == status && key.off == off)
action.forEach(([key, value]) => value.apply(this))
}
doubleVerify('name5', 5)
treblVerify('name1', 1, 0)
第四种
const actions = (fn) => {
return new Map([
[{
name: 'name1',
status: 1,
off: 0
}, fn],
[{
name: 'name2',
status: 2,
off: 1
}, fn],
[{
name: 'name3',
status: 3,
off: 0
}, fn],
[{
name: 'name4',
status: 4,
off: 1
}, fn],
[{
name: 'name5',
status: 5,
off: 1
}, fn],
])
}
const doubleVerify = (fn, name, status) => {
let action = [...actions(fn)].filter(([key, fn]) => key.name == name && key.status == status)
action.forEach(([key, value]) => value.call(this))
}
const treblVerify = (fn, name, status, off) => {
let action = [...actions(fn)].filter(([key, fn]) => key.name == name && key.status == status && key.off ==
off)
action.forEach(([key, value]) => value.apply(this))
}
doubleVerify(fn1, 'name5', 5)
doubleVerify(fn2, 'name1', 1)
treblVerify(fn1, 'name1', 1, 0)
function fn1() {
console.log('方法一')
}
function fn2() {
console.log('方法二')
}