Javascript在这种情况下,使用IF或SWITCH或“动态函数名称”的最佳做法是什么

时间:2014-01-03 18:28:01

标签: javascript if-statement switch-statement dynamic-variables

我正在寻找这种假设情况下的最佳实践。

在下面的示例中,函数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);

4 个答案:

答案 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会发生分支的方式。

  1. 如果a为0则使用if else,第一个将被击中,然后你会错过3个其余部分,但仍需要检查条件。
  2. 使用开关你将完成分支,但实际代码将在一个之后休息而不检查其余条件。
  3. 你可以通过使用else语句来实现相同的效果 如果a不为0则检查其1是否不需要这样做 如果a不是1则检查其2是否不需要这样做 这将创建嵌套的if else语句,类似于switch分支,switch会在代码中更好地读取,所以请使用它。