39

私はこのようなことをしたいと思います:

const vegetableColors = {corn: 'yellow', peas: 'green'};

const {*} = vegetableColors;

console.log(corn);// yellow
console.log(peas);// green

これを行う方法を見つけたり、理解したりすることはできませんが、以前にどこかで見たことがあると本当に思っていました! :P

注:私は;に設定してBabelを使用しています。stage0

コンテキスト:私はJSXでよりドライにしようとしていますが、参照this.statethis.propsどこでもではありません。また、データが変更された場合に、構造を解除するためにプロパティを追加し続ける必要もありません。

4

3 に答える 3

29

with私はあなたが文を探していると思います、それはあなたが求めていることを正確に行います:

const vegetableColors = {corn: 'yellow', peas: 'green'};
with (vegetableColors) {
    console.log(corn);// yellow
    console.log(peas);// green
}

ただし、正当な理由により、(ES6 モジュールを含む厳密モードで)非推奨です。

すべてのプロパティを現在のスコープに分解します

ES6 1ではできません。そして、それは良いことです。導入する変数について明示してください。

const {corn, peas} = vegetableColors;

または、グローバル オブジェクトを拡張Object.assign(global, vegetableColors)してグローバル スコープに入れることもできますが、実際にはwithステートメントよりも悪いことです。

1: …そして、ES7 でそのようなことを許可するドラフトがあるかどうかはわかりませんが、どんな提案も TC によって無効にされると言えます :-)

于 2015-08-09T19:30:47.970 に答える
2

私はそれをお勧めしませんが、eval()同様のことを達成するために使用できます:

vegetableColors = {corn: 'yellow', peas: 'green'};

function test() {
    for ( let i=0; i < Object.keys(vegetableColors).length; i++ ) {
        let k = Object.keys(vegetableColors)[i];
        eval(`var ${k} = vegetableColors['${k}']`);
    }

    console.log(corn); // yellow
}

test();

console.log(corn); // undefined (out of scope)
于 2020-11-16T21:15:30.457 に答える