1

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

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

4 回答 4

2

你可以尝试这样的事情:

var fn = window['changeGallery' + a];
if (typeof fn === "function")  {
    fn.apply(null, newArrayData);
}

“apply”的第一个参数将是函数调用中的“this”。

于 2014-01-03T18:31:53.367 回答
2

你可以做

window["changeGallery" + a](newArrayData);
于 2014-01-03T18:32:11.417 回答
0

我认为使用 for 循环会更好。您可以将函数放置在数组中。

var funcArray = [function1, function2 , function3, ...];

于 2014-01-03T18:32:36.830 回答
0

关于这一点,您需要了解一件事,那就是 if else 或 switch 将如何发生分支。

  1. 如果 a 为 0,则 if else 将命中第一个,然后您会错过其余的 3 个,但仍需要检查条件。
  2. 使用 switch 您将完成分支,但实际代码将在一个之后中断并且不检查其余条件。

您可以通过使用 else 语句来实现相同的效果,例如 if a is not 0 然后检查它是否为 1 否则不需要这样做 如果 a 不是 1 然后检查它是否为 2 否则不需要这样做这将创建嵌套的 if else 语句类似于 switch 分支和 switch 会在代码中更好地阅读,所以使用它。

于 2014-01-03T18:35:07.963 回答