July 30, 2020
새로운 다른 객체를 복사하는것같지만, 실은 복제를 하는것.
같은 객체를 바라보고있음. 불변성에 적합하지않음
const obj = {
name : '박상민',
showName(){
console.log(`저의 이름은 ${this.name}`);
}
};
const newObj = Object.assign(obj)
console.log(newObj === obj) // true
인자로 들어오는 객체에게 상속받는 새로운 객체 생성
당연히 상속받는 객체의 값들도 사용할 수 있음.
const healthObj = {
name : '이름이야',
showHealth(){
console.log(`오늘 운동시간 : ${this.healthTime}`);
}
};
const myHealth = Object.create(healthObj);
myHealth.healthTime = "11:20"; // 일일이 지정해줘야한다는 불편함
myHealth.resetTime = function(){
console.log('Fucking Reset');
};
console.log(myHealth.name) // 이름이야
Object.create
의 하나하나 지정해줘야한다는 불편함을 개선하여 상속받는 새로운 객체 생성
const healthObj = {
name : '이름이야',
showHealth(){
console.log(`오늘 운동시간 : ${this.healthTime}`);
}
};
const myHealth = Object.assign(Object.create(healthObj), {
healthTime : "11:20",
name : "Sangmin",
restTime(){
console.log('Fucking Reset');
}
})
console.log(myHealth)
myHealth Obj {
healthTime : "11:20",
name : "Sangmin", // 새로운 값으로 name을 넣었지만,
restTime(){
console.log('Fucking Reset');
},
__proto__ : {
name : '이름이야', // 최신화 안됨.
showHealth(){
console.log(`오늘 운동시간 : ${this.healthTime}`);
}
}
}
console.log(myHealth.name) // Sangmin
복제가 아닌 완전한 새로운 객체를 생성할 수 있음.
const healthObj = {
name : '이름이야',
showHealth(){
console.log(`오늘 운동시간 : ${this.healthTime}`);
}
};
const myHealth = Object.assign({}, healthObj);
console.log(healthObj === myHealth); // false
불변객체 복사 및, 값 최신화
const healthObj = {
name : '이름이야',
showHealth(){
console.log(`오늘 운동시간 : ${this.healthTime}`);
}
};
const myHealth = Object.assign({}, healthObj, {
healthTime : "11:20",
name : "Sangmin",
restTime(){
console.log('Fucking Reset');
}
});
console.log(healthObj);
// {
// name : '이름이야',
// showHealth(){
// console.log(`오늘 운동시간 : ${this.healthTime}`);
// }
// };
console.log(myHealth);
// {
// name : 'Sangmin',
// healthTime : "11:20",
// restTime(){
// console.log('Fucking Reset');
// },
// showHealth(){
// console.log(`오늘 운동시간 : ${this.healthTime}`);
// }
// };
간편하고 깊은복사이다. 정말 완벽하다. 사랑한다.
spread operator를 통한 깊은복사. 이상적.
const healthObj = {
name : '이름이야',
showHealth(){
console.log(`오늘 운동시간 : ${this.healthTime}`);
}
};
const myHealth = {...healthObj, name : "Sangmin", age : 26};
console.log(healthObj)
// {
// name : '이름이야',
// showHealth(){
// console.log(`오늘 운동시간 : ${this.healthTime}`);
// }
// };
console.log(myHealth)
// {
// name : 'Sangmin',
// age : 26,
// showHealth(){
// console.log(`오늘 운동시간 : ${this.healthTime}`);
// }
// };