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

これについて知っておく必要があることが 1 つあります。それは、if else または switch で分岐がどのように発生するかということです。

  1. if else if a is 0 を使用すると、最初のヒットがヒットし、残りの 3 を逃しますが、それでも状態を確認する必要があります。
  2. switch を使用すると、分岐が完了しますが、実際のコードは 1 つ後に中断し、残りの条件をチェックしません。

if a が 0 でない場合のような else ステートメントを使用して、if と同じことを達成できます。そうでない場合は、その 1 かどうかを確認します。そうでない場合は、そうする必要はありません。これはスイッチの分岐に似ており、スイッチはコードで読みやすくなるため、それを使用してください。

于 2014-01-03T18:35:07.963 に答える