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); // => { 'タマ' }