2016-07-09 13 views
0

jsでは、異なる引数セットをとることができる関数をどのように作成しますか?さまざまな引数セットを使用可能にする

(それとも、引数のセットごとに異なる識別子を使用して新しい機能を作成する必要がありますか?)

例:

引数は1を設定します。(0, 4, ‘purple')

引数は2を設定します。(‘purple’, true, [‘foo’, ’bar’])

[str、bool、array](引数セット2)とは違って[int、int、str](引数セット1)を扱うようにします。 ifステートメントとtypeofステートメントを使用する必要がありますか?

+0

関数本体内のif文を使用できますが、1つの引数(キーaまたはkey b、またはキーcを保持するオブジェクト)が必要ですが、2つの関数を記述しないでください。 – 1sloc

+0

引数がデコードされると、いくつかの機能が共有されるためです。 – DJG

+0

あなたが望むシグネチャは、おそらくアンチパターンを作成することになる点と似ていません。異なる機能をお勧めします。また、共通の署名に変更できるかどうか検討してください。 Jethroの答え –

答えて

2

、typeof演算/ instanceofを使用したデータの種類を確認する必要があります値のペア。

function allKindsOfInput(myObject) 
{ 
    if (myObject.color) 
    { 
     // do stuff with color 
    } 
    if (myObject.settings) 
    { 
     // do stuff with settings 
    } 
} 

1つのクリアなインターフェイスは、物事を清潔に保つのに役立ちます。

+1

さらに、 'env = Object.assign({default: 'values'}、myObject);'を実行すると、共通ロジックを使用します –

2

はい、あなたは私がか/特定のキーを保持することができませんでし可能性が対象で、唯一の引数に引数リストを制限することをお勧め

var myFn = function() { 
    var args = arguments; 
    if (typeof args[0] === 'number') { ... } 
    // or check if 2nd param is array 
    if (args[2] instanceof Array) { ... } 
    // etc 
} 
0

最も良い方法は、パラメータをオブジェクトとして使用することです。

function paintCar(settings) 
{ 
    defaults = { 
     paintTimes: 3, 
     color: '#fff', 
     paintWheels: false, 
     preWash: true, 
     useAssistant: true, 
     paintBrand: 'super-paint', 
     brushSize: 4 
    } 
    settings = settings || {} 
    for (var key in defaults) { 
     if (settings.hasOwnProperty(key)) { 
      defaults[key] = settings[key]; 
     } 
    } 
    settings = defaults; 

    // do smth 
} 


paintCar(); 
paintCar({preWash: false}); 
paintCar({paintTimes: 2, color: '#448'}); 
// etc 
関連する問題