2017-08-01 5 views
1

私は、関数の引数を構造化代入をサポートしていますノードv6.6.0、実行しています:機能パラメーターオブジェクトの非構造結果

function foo ({ a: { b }}) { 
    // stuff 
} 

を私はをdestructureとabの両方にアクセスするとします。悲しいことに、次のが動作していないよう:

function foo ({ a: { b }}) { 
    return [a, b] 
} 
foo({ a: { b: 123 }}) 
// ReferenceError: a is not defined! 

は、ノードでこのバグですか、これはES6のために予想される動作ですか?関数内にabの両方を定義してはいけませんか?そうでない場合、基本構造のプロパティ名(a)の定義を解除すると、構造が破壊されるのはなぜですか?

私は用パラメータの非構造が関数で定義された両方のabを取得することができます方法はありますか?私は明示的に手動でそれらを破壊するのを避けるために明示的に試みています

+0

'A'は単にパラメータ 'B'の性質から取られるべきであるものを指します。定義されていないか、パラメータとしてアクセスできません。 'a'にアクセスしたい場合は、関数内で' b'を自分自身で抽出する必要があります。 –

答えて

4

Nodeにこのバグはありますか、これはES6の予想される動作ですか?

これは予想される動作です。 {a: {b}}は名前としてaをバインドしないため、破壊されたオブジェクトのaプロパティにアクセスしたいことを示しているだけです。

以下を使用できます。

function foo ({ a, a: {b} }) { 
 
    return [a, b] 
 
} 
 
console.log(foo({ a: { b: 123 }}))

+0

ああ、とても簡単!それは可能性として私の心を横切っていませんでした。ありがとう! – GladstoneKeep

関連する問題