17-6. Object 오브젝트(ES5 기준) / 프로퍼티 디스크립터 함수
getOwnPropertyDescriptor()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 첫번째 파라미터: 대상 오브젝트 두번째 파라미터: 프로퍼티 이름 |
반환 | 디스크립터 |
프로퍼티 디스크립터의 속성 이름, 값 반환
다른 오브젝트에서 받은 프로퍼티는 제외
var obj = {}; Object.defineProperty(obj, "book", { value: "책", writable: true, enumerable: true }) var desc = Object.getOwnPropertyDescriptor(obj, "book"); for (var key in desc) { console.log(key + ":" + desc[key]); } // value: 책 // writable: true // enumerable: true // configurable: false
preventExtensions()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 대상 오브젝트 |
반환 | 대상 오브젝트 |
- 오브젝트에 프로퍼티 추가 금지 설정
- 프로퍼티 삭제, 변경은 가능
추가 금지를 설정한 후에는 추가 가능으로 변경 불가
var obj = {}; Object.preventExtensions(obj); try { Object.defineProperty(obj, "book", { value: "책" }); } catch (e) { console.log("추가 불가"); } // 추가 불가
- 추가 금지 상태에서 프로퍼티를 추가하면 에러 발생
데이터를 보호하는 관점에서 이해하시면 됩니다.
isExtensible()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 대상 오브젝트 |
반환 | true / false |
오브젝트에 프로퍼티 추가 금지 여부 반환
true: 추가 가능, false: 추가 불가
var obj = {}; Object.defineProperty(obj, "book", { value: "책", }) console.log(Object.isExtensible(obj)); // true Object.preventExtensions(obj); console.log(Object.isExtensible(obj)); // false
seal()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 대상 오브젝트 |
반환 | 대상 오브젝트 |
- 오브젝트에 프로퍼티 추가, 삭제 금지 설정
추가 금지는 오브젝트 단위로 설정하고 삭제 금지는 프로퍼티 단위로 설정
var obj = {}; Object.defineProperty(obj, "book", { value: "책", writable: true }) Object.seal(obj); try { Object.defineProperty(obj, "sports", { value: "스포츠" }) } catch (e) { console.log("추가 불가"); } // 추가 불가
- 추가 금지를 하더라도 변경은 가능
isSealed()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 대상 오브젝트 |
반환 | true/false |
오브젝트에 프로퍼티 추가, 삭제 금지 여부 반환
true: 불가, false: 가능
var obj = {}; Object.defineProperty(obj, "book", { value: "책", writable: true }) console.log(Object.isSealed(obj)); // false Object.seal(obj); console.log(Object.isSealed(obj)); // true
freeze()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 대상 오브젝트 |
반환 | 대상 오브젝트 |
오브젝트에 프로퍼티 추가, 삭제, 변경 금지 설정
var obj = {}; Object.defineProperty(obj, "book", { value: "JS책", writable: true }) Object.freeze(obj); try { Object.defineProperty(obj, "book", { value: "포인트" }) } catch (e) { console.log("변경 불가"); } // 변경 불가 console.log(obj.book); // JS책
isFrozen()
구분 | 데이터(값) |
---|---|
object | Object 오브젝트 |
파라미터 | 대상 오브젝트 |
반환 | true/false |
오브젝트에 프로퍼티 추가, 삭제, 변경 금지 여부 반환
true: 불가, false: 가능
var obj = {}; Object.defineProperty(obj, "book", { value: "책", writable: true }) console.log(Object.isFrozen(obj)); // false Object.freeze(obj); console.log(Object.isFrozen(obj)); // true