41937


ES2015の分割代入で、  
引数のオブジェクト自体の定義も一緒にすることは出来ますか？

[code]

    function test_es5(obj){
        var a = obj.a;
        console.log(obj);
        console.log(a);
    }
    
    function test_es2015({a}){
        console.log(arguments[0]);
        //console.log(obj); objも分割代入と一緒に定義する方法はありますか？
        console.log(a);
    }
    
    var obj = {a:100};
    test_es5(obj);
    test_es2015(obj);
[/code]


CC BY-SA 3.0
2018-02-22T10:38:34.393
41925
2018-02-22T23:04:34.577
2018-02-22T12:44:31.267
3068
27503
question
javascript
ES2015の分割代入でオブジェクトとプロパティを両方定義したい


[言語仕様](http://www.ecma-international.org/ecma-262/6.0/)を見る限りできません。関連する構文を抜き出すと

[code]

    FormalParameter:
        BindingElement
    BindingElement:
        SingleNameBinding
        BindingPattern Initializer(opt)
    SingleNameBinding:
        BindingIdentifier Initializer(opt)
    BindingPattern:
        ObjectBindingPattern
        ArrayBindingPattern
    ObjectBindingPattern:
        { }
        { BindingPropertyList }
        { BindingPropertyList, }
    ArrayBindingPattern:
        [ Elisionopt BindingRestElement(opt) ]
        [ BindingElementList ]
        [ BindingElementList, Elision(opt) BindingRestElement(opt) ]
    
[/code]

となっていて、要するに

  * 単純な識別子`obj`
  * オブジェクトパターン`{ a }`
  * 配列パターン`[ b ]`

の３種類だけが記述できるように定義されています。そのためこれらを混ぜ合わせることはできないようです。


CC BY-SA 3.0
2018-02-22T23:04:34.577
41937
2018-02-22T23:04:34.577
4236
41925
answer