我正在寻找这种假设情况下的最佳实践。
在下面的示例中,函数changeGallery0()是一个独特的函数,与changeGallery1(),changeGallery2()不同。它们无法修改以解决此问题。但是每个函数都采用完全相同的数据(newArrayData)
此代码似乎“丑陋”但工作正常。 20个画廊会变得更加丑陋。我意识到调用独特函数存在一些问题,但它有助于说明我的问题。
使用SWITCH案例似乎更合适。但它比这个基于IF的解决方案有什么优势吗?它看起来像一个“动态函数名称”(存在)是否有意义?
谢谢!
if (a == 0) changeGallery0(newArrayData);
if (a == 1) changeGallery1(newArrayData);
if (a == 2) changeGallery2(newArrayData);
if (a == 3) changeGallery3(newArrayData);
答案 0 :(得分:2)
您可以尝试这样的事情:
var fn = window['changeGallery' + a];
if (typeof fn === "function") {
fn.apply(null, newArrayData);
}
“apply”的第一个参数在函数调用中将是“this”。
答案 1 :(得分:2)
你可以做到
window["changeGallery" + a](newArrayData);
答案 2 :(得分:0)
我认为使用for循环会更好。您可以将函数放在数组中。
var funcArray = [function1, function2 , function3, ...];
答案 3 :(得分:0)
有一点你需要知道的是if else或switch会发生分支的方式。
你可以通过使用else语句来实现相同的效果 如果a不为0则检查其1是否不需要这样做 如果a不是1则检查其2是否不需要这样做 这将创建嵌套的if else语句,类似于switch分支,switch会在代码中更好地读取,所以请使用它。