15

ES6の新しい分割代入機能は、現在かなりよく知られています ( Babel の REPL のライブ コピー)。すでに存在する変数の場合:

let a, b;                 // Existing variables
let o = {a: "a", b: "b"}; // An object to get values from
// ...
({a, b} = o);             // Set them to the props from `o`
console.log(a);           // "a"
console.log(b);           // "b"

ES6に簡単な会話はありますか? 同じ名前の変数に基づいて既存のオブジェクトにプロパティを設定しますか? (明らかなもの以外o.a = a; o.b = b;)

オブジェクトを作成するときについて話しているのではないことに注意してください。名前を不必要に繰り返さないようにする素晴らしい新しいオブジェクト初期化構文を使用してそれを行うことができます。

let a = "a";
let b = "b";
let o = {a, b};

しかし、既にオブジェクトを持っている場合、 ES6 である種の構造化代入を行うことはできますか?

4

2 に答える 2

11

私が思いついた最も近いのはObject.assign、一時オブジェクト(ライブコピー)を使用することです:

let a = "a", b = "b";             // The variables
let obj = {c: "c"};               // The existing object
Object.assign(obj, {a, b});       // "Structuring" assignment, sort of
console.log(JSON.stringify(obj)); // "{"c":"c","a":"a","b":"b"}

これはかなり単純ですが、関数呼び出しと一時オブジェクトです。


更新: Bergiはコメントで、これを実行するオペレーターに対するストローマンの提案 (リンクは現在無効)があることを指摘して:=おり、最初のユース ケースの 1 つは実際に、主にこの質問に私を導くユース ケースです: コンストラクター:

// From strawman proposal linked above, doesn't actually exist yet!
class Point {
   constructor(x,y) {
      this := {x,y}  //define and initialize x and y properties of new object
      //   ^^
   }
}

したがって、ストローマンが存在することを考えると、今のところ、これassignが ES6 でできる最善の方法になると思います。ストローマンの古い wiki はオフラインで:=提案リポジトリには何もありません。

于 2015-06-17T17:06:31.007 に答える