Object.createとObject.assignの挙動が違う。
うーん。挙動の違いを1つづつ覚えていくかな。
Object.createで生成したオブジェクトとObject.assignでシャローコピーしたオブジェクトの違い。
Object.createで生成したオブジェクト自身のプロパティは存在しない。
Object.createで生成したオブジェクト自身のプロパティにmemberがない。hasOwnPropertyで確認するとfalseになる。
Object.assignで生成したオブジェクト自身のプロパティにmemberがある。hasOwnPropertyで確認するとtrueになる。
これは重要な挙動の違いと思う。
const a = {
member: 'John'
};
const b = Object.create(a);
const c = Object.assign({}, a)
const hantei0 = a.hasOwnProperty('member');
console.log('hantei0', hantei0); // hantei0 true
const hantei1 = b.hasOwnProperty('member');
console.log('hantei1', hantei1); // hantei1 false
const hantei2 = c.hasOwnProperty('member');
console.log('hantei2', hantei2); // hantei2 true
if ('member' in a) {
console.log('1:true'); // 1:true
}
if ('member' in b) {
console.log('2:true'); // 2:true
}
if ('member' in c) {
console.log('3:true'); // 3:true
}