繁体   English   中英

在这种情况下,使用IF或SWITCH或“动态功能名称”的最佳实践是什么

[英]Javascript What is best practice using IF or SWITCH or “dynamic function name” in this case

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

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

您可以尝试这样的事情:

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

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

你可以做

window["changeGallery" + a](newArrayData);

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

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

关于这一点,您需要了解的一件事是,如果不进行切换或切换,分支将如何发生。

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

如果使用else语句,例如a如果不为0,则可以实现相同的结果,否则请检查其是否为1,否则不需要这样做;如果a不为1,则应检查其是否为2,否则不需要这样做,这将创建嵌套的if语句与switch分支相似,并且switch会更好地读取代码,因此可以使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM