誰かがかつて、本当に良いプログラムには、if..elseが持っていないと言っていました。もちろん、Switchはそれほど良くありません。 JS仕様では、スイッチの使用が禁止されています。
コマンドオブジェクトは、この問題を完全に解決します。
外国のブログを引用してください:
JavaScriptには優れた制御フローステートメントがあり、巻き毛の装具に包まれていることがよくあります。ただし、例外があります。スイッチ…ケースステートメント。 Switchの奇妙なことは、ケースが各ケースの最後にキーワードブレイクを追加して、プロセス制御が次のケースステートメントまで移動するのを防ぐ必要があることです。タイムトラベルとは、複数のケースを実行できるようにする方法を指します。予想される休憩に遭遇しない場合、コントロールは自動的に次のケースに引き渡されます。ただし、セミコロンや巻き毛の装具と同じように、誤って休憩を書くのを忘れるかもしれません。これが発生すると、ステートメント自体が正しいため、後のエラーチェックはより痛みを伴います。したがって、ケースを書くのは良い習慣です...ペアで壊れてください。
通常、JavaScriptにはエレガントなオブジェクトリテラルとトップレベルの関数があると言います。これにより、特定のメソッドクエリが非常にシンプルになります。メソッドクエリ用に作成されたオブジェクトは、それをアクティブオブジェクトまたはコマンドオブジェクトと呼びます。これは、強力で有用なコマンドパターンを含む多くのソフトウェア設計パターンで使用されます。
例:
コードコピーは次のとおりです。
//スイッチメソッド
function testswitch(name){
switch(name){
ケース '1':
「ハック」を返します。
壊す;
ケース '2':
「スラッシュ」を返します。
壊す;
ケース '3':
「run」を返します。
壊す;
デフォルト:
falseを返します。
壊す;
}
}
//コマンドオブジェクトを使用します
関数testfn(name){
var names = {
'1':function(){
「ハック」を返します。
}、
'2':function(){
「スラッシュ」を返します。
}、
'3':function(){
「run」を返します。
}
};
if(typeof names [name]!== 'function'){
falseを返します。
}
return names [name]();
}
//テスト結果
var result1 = testswitch( '1');
var result2 = testfn( '2');
console.info(result1、result2);