2016-08-04 8 views
1

以下のコードでは、のマジックを置き換えるものがあるかと思いますが、その上にあるfooの呼び出しと同じことが行われます。ES6で名前のない非構造化パラメータを参照する方法は?

function foo(a, { b=0, c=1 } = {}) { 
    console.log(a, b, c); 
} 
function bar({ b=2, c=3 } = {}) { 
    foo(99, { b:b, c:c }); 
// foo(99, magic); // should be equivalent to the above call 
} 
bar({c:4}); 

理由ビーイング私は無名のオブジェクトパラメータがかなり大きい機能を持っており、毎回すべてのオブジェクトキーを書くよりも起こりやすい少ないエラーをより見やすくとなり速記のように思えます。 (私のpythonからES6にライブラリを移植し、できるだけ既存のAPIを維持しようとしている。)


編集:これを依頼する別の方法は次のとおりです。「これらのパラメータをループする方法はありbc名前を知らずに? "


EDIT2:ここでは実際のコードは次のようになります。機能的だが醜い。より良い方法でなければならない。

function Decoder({ 
    encoding="utf-8", 
    object_hook=echo, 
    parse_float=Number, 
    parse_int=Number, 
    parse_constant=Number, 
    strict=true, 
    object_pairs_hook=echo} = {}) { 

    if(!(this instanceof Decoder)) { 
     return new Decoder({ 
      encoding:encoding, 
      object_hook:object_hook, 
      parse_float:parse_float, 
      parse_int:parse_int, 
      parse_constant:parse_constant, 
      strict:strict, 
      object_pairs_hook:object_pairs_hook}); 
    } 
    this.encoding = encoding; 
    this.object_hook = object_hook; 
    this.parse_float = parse_float; 
    this.parse_int = parse_int; 
    this.parse_constant = parse_constant; 
    this.strict = strict; 
    this.object_pairs_hook = object_pairs_hook; 
} 

答えて

1

関数内でデストラクションを実行します。このようなもの:

function bar(obj) { 
    const { b = 2, c = 3 } = obj 
    const magic = { b, c } 
    foo(99, magic); // abracadabra 
} 
関連する問題