1 오브젝트의 프로퍼티의 값을 불변하게 해보자
2 오브젝트의 숨은 프로퍼티에 대해 알아보자
3 프로토타입
4 OOP를 프로토타입으로 하는것, 클래스로 하는것 다른가?
5 this를 알아보자

JS 오브젝트의 프로퍼티의 값을 불변하게 해보자

bGV0IG9iamVjdCA9IHsgbmFtZTogJ2tpbScsIGFnZTogNDUgfTsKLy8g7J2066CH6rKMIOyYpOu4jOygne2KuOulvCDtlZjrgpgg66eM65Ok7IiYIOyeiOuLpAovLyDsmKTruIzsoJ3tirjsl5Ag7IaN7ISx7J2EIOuRkOqwnCDrp4zrk6Tsl4jri6QKCm9iamVjdC5uYW1lID0gJ3BhcmsnOwovLyDsnbTqsoPsnYQg7Iuk7ZaJ7ZWY66m0IOqwkuydtCDrs4DtlaDqsoPsnbTri6QKLy8g6re465+w642wIOydtOugh+qyjCDtlbTrj4Qg6rCS7J20IOuzgO2VmOyngCDslYrrj4TroZ0g7ZWgIOyImCDsnojri6QKLy8gbmFtZeydhCDsk7DquLDqsIAg67aI6rCA64ql7ZWcIOyDge2DnOuhnCDrp4zrk6TrqbQg65Cc64ukCi8vIOydvOuLqCDsnbQgbmFtZeydtCDsk7DquLDqsIAg6rCA64ql7ZWcIOyDge2DnOyduOyngCDtmZXsnbjtlZjripQg67Cp67KV7J2AIOychOydmCDsvZTrk5zsspjrn7wg6rCS7J2EIOuzgOqyve2VtOuztOuptCDrkJzri6QKCmNvbnNvbGUubG9nKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCAnbmFtZScpKQovLyDsnbTqsoPsnYAgbmFtZeydtCDsk7DquLDqsIAg6rCA64ql7ZWcIOyDge2DnOyduOyngCDtmZXsnbjtlbTrs7TripQg65iQIOuLpOuluCDrsKnrspXsnbTri6QKLy8g7Jik67iM7KCd7Yq46rCAIO2VmOuCmCDstpzroKXrkJjqsowg65CY64qU642wIOyYpOu4jOygne2KuOydmCDsho3shLHqsJIg7KSRIHdyaXRhYmxlIOydtOuegOqyg+ydmCDqsJLsnbQgdHJ1ZeuptCDsk7DquLDqsIAg6rCA64ql7ZWcIOyDge2DnOyehOydhCDrnLvtlZzri6QKLy8g64KY66i47KeAIHdyaXRhYmxl7Jm47JeQIGVudW1lcmFibGUsIGNvbmZpZ3VyYWJsZeydtOuegOqyg+uPhCDrs7TsnbTripTrjbAg7J206rKD65Ok64+EIOuqqOuRkCB0cnVl7J246rKD7J20IO2ZleyduOuQnOuLpAovLyDsmrDrpqzqsIAg7J20IG9iamVjdOulvCDrp4zrk6Tsl4jrjZgg7JyE7JeQ7ISc7J2YIOuwqeuyleyymOufvCDrp4zrk6TrqbQg7J206rKD65Ok7J2AIOuqqOuRkCB0cnVl7J2064ukCgpkZWxldGUgb2JqZWN0Lm5hbWU7Ci8vIOyTsOq4sOqwgCDqsIDriqXtlZjrqbQg7J207JmAIOqwmeydtCDsho3shLHsnZgg7KCc6rGw64+EIOqwgOuKpe2VmOupsCDrsJjrjIDroZwg7JOw6riw6rCAIOu2iOqwgOuKpe2VmOuptCDsho3shLHsoJzqsbDrj4Qg7JWI65Cc64ukCgovLyDqt7jrn6zrqbQg7J20IHdyaXRhYmxl7J2EIGZhbHNl66GcIOuwlOq/lOuztOugpOuptCDslrTrlrvqsowg7ZW07JW87ZWg6rmMCi8vIOydvOuLqCDslYTrnpjsmYAg6rCZ7J207ZW067O464ukCmxldCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsICdhZ2UnKTsKZGVzYy53cml0YWJsZSA9IGZhbHNlOwpjb25zb2xlLmxvZyhkZXNjKTsKb2JqZWN0LmFnZSA9IDQ0Owpjb25zb2xlLmxvZyhvYmplY3QpOwovLyDtlbTrs7gg6rKw6rO8IOqwkuydtCDsl6zsoITtnogg7J6Y67CU64CM64qU6rKD7Jy866GcIOuztOyVhCB3cml0YWJsZeydhCBmYWxzZeuhnCDrsJTqvrzqsoPsnbQg7JWI66i57Z6MIOuqqOyWkeydtOuLpAovLyDsoJXrp5Ag7JWI66i57ZiU64qU7KeAIO2ZleyduO2VtOuztOyekAoKY29uc29sZS5sb2coT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsICdhZ2UnKSkKLy8g6rCS7J20IOyXrOyghO2eiCB0cnVl66GcIOuCmOyYpOuKlOqyg+ydhCDrs7wg7IiYIOyeiOuLpAoKT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgJ2FnZScsIHsKICAgd3JpdGFibGU6IGZhbHNlLAp9KTsKb2JqZWN0LmFnZSA9IDExNDQ7CmNvbnNvbGUubG9nKG9iamVjdCk7CmNvbnNvbGUubG9nKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCAnYWdlJykpCi8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSDrnbzripQg7ZWo7IiY66W8IOyCrOyaqe2VtOyEnCDsnITsmYAg6rCZ7J20IOyGjeyEseyXkCDrs4DtmZTrpbwg7KSEIOyImOyeiOuLpAovLyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIOuhnCDtmZXsnbjtlojsnYTrlYwg67OA7ZmU65Cc6rKD7J20IO2ZleyduOuQnOuLpAo=
let object = { name: 'kim', age: 45 }; // 이렇게 오브젝트를 하나 만들수 있다 // 오브젝트에 속성을 두개 만들었다 object.name = 'park'; // 이것을 실행하면 값이 변할것이다 // 그런데 이렇게 해도 값이 변하지 않도록 할 수 있다 // name을 쓰기가 불가능한 상태로 만들면 된다 // 일단 이 name이 쓰기가 가능한 상태인지 확인하는 방법은 위의 코드처럼 값을 변경해보면 된다 console.log(Object.getOwnPropertyDescriptor(object, 'name')) // 이것은 name이 쓰기가 가능한 상태인지 확인해보는 또 다른 방법이다 // 오브젝트가 하나 출력되게 되는데 오브젝트의 속성값 중 writable 이란것의 값이 true면 쓰기가 가능한 상태임을 뜻한다 // 나머지 writable외에 enumerable, configurable이란것도 보이는데 이것들도 모두 true인것이 확인된다 // 우리가 이 object를 만들었던 위에서의 방법처럼 만들면 이것들은 모두 true이다 delete object.name; // 쓰기가 가능하면 이와 같이 속성의 제거도 가능하며 반대로 쓰기가 불가능하면 속성제거도 안된다 // 그러면 이 writable을 false로 바꿔보려면 어떻게 해야할까 // 일단 아래와 같이해본다 let desc = Object.getOwnPropertyDescriptor(object, 'age'); desc.writable = false; console.log(desc); object.age = 44; console.log(object); // 해본 결과 값이 여전히 잘바뀌는것으로 보아 writable을 false로 바꾼것이 안먹힌 모양이다 // 정말 안먹혔는지 확인해보자 console.log(Object.getOwnPropertyDescriptor(object, 'age')) // 값이 여전히 true로 나오는것을 볼 수 있다 Object.defineProperty(object, 'age', { writable: false, }); object.age = 1144; console.log(object); console.log(Object.getOwnPropertyDescriptor(object, 'age')) // Object.defineProperty 라는 함수를 사용해서 위와 같이 속성에 변화를 줄 수있다 // Object.getOwnPropertyDescriptor 로 확인했을때 변화된것이 확인된다