我有一段这样的代码:
switch(v[0]){
case 1:
$(o).test({default:true}).on("click", function(e){
stopf(e);
func1(v[1]);}
});
break;
case 2:
$(o).test({default:true}).on("click",function(e){
stopf(e);
func2(v[1]);}
});
break;
case 3:
$(o).test({default:true}).on("click",function(e){
stopf(e);
func3();}
});
break;
case 4:
$(o).test({default:true}).on("click",function(e){
stopf(e);
func4();}
});
break;
case 5:
$(o).test({default:true}).on("click",function(e){
stopf(e);
func5(v[1],v[2]);}
});
break;
// AND ON AND ON....
}
正如您所看到的,唯一的区别是每行末尾的funcX()
部分。有没有办法缩短这段代码?也许这样的事情(尝试过,不起作用):
switch(v[0]){
case 1: myfunc=func1(v[1]);break;
case 2: myfunc=func2(v[1]);break;
case 3: myfunc=func3();break;
case 4: myfunc=func4();break;
case 5: myfunc=func5(v[1],v[2]);break;
}
$(o).test({default:true}).on("click",function(e){
stopf(e);
myfunc);
}
答案 0 :(得分:3)
将函数放在对象中:
var funcs = {
1: function() { func1(v[1]); },
2: function() { func2(v[1]); },
3: func3,
4: func4,
5: function() { funct5(v[1], v[2]); }
};
然后在绑定点击处理程序时使用它:
$(o).test({default: true}).on("click", function(e) {
stopf(e);
funcs[v[0]]();
});
请注意,您必须使用function() { ... }
打包所有电话。否则,您将在分配变量时调用该函数,而不是在触发事件时调用该函数。
答案 1 :(得分:0)
如果在全局范围内设置了函数,则可以使用:
$(o).test({
default: true
}).on("click", function (e) {
stopf(e);
window["func" + v[0]](v[1], v[2]);
}
答案 2 :(得分:0)
如果这些参数很重要,这应该使A. Wolff的工作更加正确:
$(o).test({default:true}).on("click",function(e){stopf(e);
window["func" + v[0]](v[0] == (1 && 2 && 5) ? v[1] : null, v[0] == 5 ? v[2] : null);}
答案 3 :(得分:0)
Eighter你必须将它声明为内联函数:
switch(v[0]){
case 1: myfunc=function(v[1]){ /* do something 1 */ }; break;
case 2: myfunc=function(v[1]){ /* do something 2 */ }; break;
case 3: myfunc=function(){ /* do something 3 */ }; break;
case 4: myfunc=function(){ /* do something 4 */ }; break;
case 5: myfunc=function(v[1],v[2]){ /* do something 5 */ }; break;
}
或者你先声明它们(看起来你已经有了这些功能),在我看来这更具可读性:
var func1 = function(p){ /* do something 1 */ };
var func2 = function(p,q){ /* do something 2 */ };
// and use the switch statement like this:
switch(v[0]){
case 1: myfunc=func1; break;
case 2: myfunc=func2; break;
}