ES5 Object 함수
이름 | 기능 |
---|
defineProperty() | 프로퍼티 추가, 프로퍼티 속성 변경 |
defineProperties() | 다수의 프로퍼티 추가, 속성 변경 |
getPrototypeOf() | prototype에 연결된 프로퍼티 반환 |
getOwnPropertyNames() | 프로퍼티 이름을 배열로 반환 |
keys() | 열거 가능 프로퍼티 이름 반환 |
getOwnPropertyDescriptor() | 디스크립터 속성 반환 |
preventExtensions() | 프로퍼티 추가 금지 설정 |
isExtensible() | 프로퍼티 추가 금지 여부 반환 |
seal() | 프로퍼티 추가, 삭제 금지 설정 |
isSealed() | 프로퍼티 추가, 삭제 금지 여부 반환 |
freeze() | 프로퍼티 추가, 삭제/변경 금지 설정 |
isFrozen() | 프로퍼티 추가, 삭제/변경 금지 여부 반환 |
Object에 프로퍼티 추가
프로퍼티마다 상태를 가지고 있다. (상태 : 변경/삭제/열거 가능 여부)
1. defineProperty()
구분 | 데이터 (값) |
object | Object 오브젝트 |
파라미터 |
대상 오브젝트 |
|
프로퍼티 이름 |
|
속성 |
반환 | 대상 오브젝트 |
var obj = {};
Object.defineProperty(obj,"book",{
value: "Javascript",
enumerable: true
});
console.log(obj);
[실행 결과]
{book: Javascript}
2. defineProperties()
구분 | 데이터 (값) |
object | Object 오브젝트 |
파라미터 |
대상 오브젝트 |
| 프로퍼티 이름과 속성 |
반환 | 대상 오브젝트 |
var obj = {};
Object.defineProperty(obj,{
soccer: {
value: "축구",
enumerable: true
},
baseball{
value: "야구",
enumerable: true
}
});
for (var name in obj){
console.log(name + ":" + obj[name]);
[실행 결과]
soccer:축구
baseball:야구
프로퍼티 디스크립터
타입 |
속성 이름 |
속성 값 |
디폴트 값 |
기능 |
data |
value | JS 지원 데이터 타입 | undefined | 프로퍼티 값으로 사용 |
|
writable |
true, false |
false |
false: value 값 변경 불가 |
access |
get | Function Obeject, undefined | undefined | 프로퍼티 함수 |
|
set |
Function Obeject, undefined |
undefined |
프로퍼티 함 |
public |
enumerable | true, false | false | false: for-in으로열거 불가 |
|
configurable | true, false | false | false: 프로퍼티 삭제 불가 |
✓ 프로퍼티의 속성 이름과 속성 값을 정의
✓ 디스트립터 타입에 속한 속성만 같이 사용할 수 있음.
→ data 타입과 access 타입은 같이 사용 ✕
ex) value - set ✕
→ data - public / access - public은 같이 사용 가능
1. value 속성
var obj = {};
Object.defineProperty{obj, "book", {
value: "Javascript",
enumerable: true
});
for (var name in obj){
console.log(name);
console.log([name]);
[실행 결과]
book
Javascript
2. writable 속성
var obj = {};
Object.defineProperty(obj, "book", {
value: "Javascript",
writable: true
});
obj.book = "변경 가능";
console.log(obj.book);
[실행 결과]
변경 가능
var obj = {};
Object.defineProperty(obj, "book", {
value: "Javascript",
writable: false
});
obj.book = "변경";
console.log(obj.book);
[실행 결과]
Javascript
3. enumerable 속성
var obj = {};
Object.defineProperty(obj, "book", {
value: "Javascript",
enumerable: true
});
for (var name in obj){
console.log(name + ":" +obj[name]);
[실행 결과]
book:Javascript
var obj = {};
Object.defineProperty(obj, "book", {
value: "Javascript",
enumerable: false
});
for (var name in obj){
console.log(name + ":" +obj[name]);
[실행 결과]
4. configurable 속성
var obj = {};
Object.defineProperty(obj, "book", {
value: "Javascript",
configurable: true
});
delete obj.book;
console.log(obj.book);
[실행 결과]
undefined
var obj = {};
Object.defineProperty(obj, "book", {
value: "Javascript",
configurable: false
});
delete obj.book;
console.log(obj.book);
[실행 결과]
Javascript