[모던자바스크립트 딥다이브] 16장 프로퍼티 어트리뷰트 (2)
2023. 8. 16. 03:07ㆍ스터디/모던자바스크립트딥다이브
프로퍼티 정의
- 프로퍼티 정의
- Object.definedProperty
- Object.definedProperties
- 새로운 프로퍼티를 추가하며 프로퍼티 어트리뷰트를 명시적으로 정의 / 기존 프로퍼티의 프로퍼티 어트리뷰트를 재 정의하는 것
- value, get, set, writable(갱신 여부), configurable(재정의 여부), enumerable(열거 여부)
const developer = {}
//Object.definedProperty 는 한번에 하나의 프로퍼티만 정의 가능하다.
//Object.definedProperties 는 한번에 여러개의 프로퍼티를 정의 할 수 있다.
Object.definedProperty(developer, 'language', {
value : ['JavaScript', 'Java', 'SQL'],
writable : true,
enumerable : true,
configurable : true
})
Object.definedProperty(developer, 'career', {
value : '2years'
writable : true
})
console.log(Object.getOwnPropertyDescriptor(developer, 'career'))
// → Object { value: '2years', writable: true, enumerable: false, configurable: false }
// 데이터 프로퍼티 뿐 아니라, 접근자 프로퍼티도 정의 가능하다.
Object.definedProperty(developer, 'resume', {
get() {
return `${this.career} ${this.language[0]}`
}
})
객체 변경 방지
자바스크립트의 객체는 변경 가능한 값이므로 재할당 없이 직접 변경 가능
자바스크립트는 객체의 변경을 방지하는 다양한 메서드를 제공한다.
1. 객체 확장 금지
프로퍼티 추가 ,프로퍼티 삭제, 프로퍼티 값 읽기, 프로퍼티 값 쓰기, 프로퍼티 어트리뷰트 재정의- 프로퍼티 동적 추가, Object.defineProperty 메서드 사용을 통해 객체가 확장 되는 것 모두 금지
- Object.preventExtensions 메서드
const account = {
accountNum : '001-000-00001',
accountBalance : 100000000
}
// account 객체의 확장을 금지한다. 프로퍼티가 추가 될 수없다.
Object.preventExtensions(account)
- Object.isExtensible 메서드를 통해서 확인 가능
const account = {
accountNum : '001-000-00001',
accountBalance : 100000000
}
console.log(Object.isExtensible(account)) // true, 확장 가능
Object.preventExtensions(account)
console.log(Object.isExtensible(account)) // false, 확장 금지됨
2. 객체 밀봉
프로퍼티 추가 ,프로퍼티 삭제, 프로퍼티 값 읽기, 프로퍼티 값 쓰기,프로퍼티 어트리뷰트 재정의- Object.seal 메서드
- Object.isSealed 메서드를 통해서 확인 가능
3. 객체 동결
프로퍼티 추가 ,프로퍼티 삭제, 프로퍼티 값 읽기,프로퍼티 값 쓰기,프로퍼티 어트리뷰트 재정의- Object.freeze 메서드
- Object.isFrozen 메서드를 통해서 확인 가능
4. 불변 객체
- Object.preventExtensions, Object.seal, Object.freeze 객체 변경 방지 메서드들은 얕은 변경 방지로 중첩 객체 까지 영향을 끼치지 못한다.
- 재귀적으로 객체의 하위 객체에 대해 Object.freeze를 해야 불변 객체를 구현할 수 있다.
'스터디 > 모던자바스크립트딥다이브' 카테고리의 다른 글
[모던 자바스크립트 딥다이브] 12장 함수 (2) | 2024.04.24 |
---|---|
[모던자바스크립트 딥다이브] 17장 생성자 함수에 의한 객체 생성 (0) | 2023.08.16 |
[모던자바스크립트 딥다이브] 16장 프로퍼티 어트리뷰트 (1) (0) | 2023.08.15 |
[모던자바스크립트 딥다이브] 15장 let, co nst 키워드와 블록 레벨 스코프 (0) | 2023.08.13 |
[모던자바스크립트 딥다이브] 14장 전역 변수의 문제점 (0) | 2023.08.13 |