/**
* 按钮点击事件
* @param {number} status 活动状态:1进行中 2失败 3 成功 4 售罄 5 未开团
* @param {string} identity 身份标识:guest客态 master主态
*/
第一种 Object形式
const actions = {
'guest_1':()=>{/*do sth*/},
'guest_2':()=>{/*do sth*/},
'master_1':()=>{/*do sth*/},
'master_2':()=>{/*do sth*/},
//....
}
const onButtonClick = (identity,status)=>{
let action = actions[`${identity}_${status}`] || actions['default']
action.call(this)
}
第二种 Map形式
const actions = new Map([
[{identity:'guest',status:1},()=>{/*do sth*/}],
[{identity:'guest',status:2},()=>{/*do sth*/}],
[{identity:'master',status:1},()=>{/*do sth*/}],
[{identity:'master',status:2},()=>{/*do sth*/}],
//...
])
const onButtonClick = (identity,status)=>{
let action = [...actions].find(([key,value])=>(key.identity == identity && key.status == status))
action[1].call(this);
}
// 如果增加判断,status1-4的处理逻辑一样,并且所有guest都上报埋点
const actions = ()=>{
const functionA = ()=>{/*do sth*/}
const functionB = ()=>{/*do sth*/}
const functionC = ()=>{/*do sth*/}
const functionD = ()=>{/*do sth*/}
const functionE = ()=>{/*send log*/}
// map的优势在于key可以任何类型
return new Map([
[/^guest_[1-4]$/,functionA],
[/^guest_5$/,functionB],
[/^guest_.*$/,functionE],
[/^master[1-4]$/,functionC],
[/^master_5$/,functionD],
//...
])
}
const onButtonClick = (identity,status)=>{
let action = [...actions()].filter(([key,value])=>(key.test(`${identity}_${status}`)))
action.forEach(([key,value])=>value.call(this))
}
网友评论