JS Object.assign()でオブジェクトのコピー

jsでオブジェクトのコピーを普通に行うと以下のように成るらしい。(結構JSいじってたのに、恥ずかしながら知らなかった。。。)

var obj = {a: '1'};
var obj1 = obj;
obj.b = '2';

console.log(obj);
// => { a: '1', b: '2' } → これは当たり前!

console.log(obj1);
// => { a: '1', b: '2' } → { a: '1' } となって欲しい、と言うか直感的にはこうなるはずだと思いがち

こんなことが起きないように、Object.assign()なるものをJSは用意してくれたみたいです。

const obj = {a: '1'};
const obj1 = Object.assign({}, obj);
obj.b = '2';

console.log(obj);
// => { a: '1', b: '2' }
console.log(obj1);
// => { a: '1' }

番外編

調べてみると結構すごい関数らしい。これから、色々お世話になりそう。

オブジェクトのマージ

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // => { a: 1, b: 2, c: 3 }
console.log(o1);  // => { a: 1, b: 2, c: 3 }, targetオブジェクト自身も変化する

コンストラクタでの使用

class Cat {
  constructor( name, age, color ) {
    Object.assign( this, { name, age, color } )
  }
}

var tama = new Cat( 'タマ', 9, '桃' )
console.log(tama.name); // => { 'タマ' }