[Javascript] Object 오브젝트 (ES5)(1)

newsilver·2021년 6월 8일
0

Javascript

목록 보기
6/16
post-thumbnail

ES5 Object 함수

이름기능
defineProperty()프로퍼티 추가, 프로퍼티 속성 변경
defineProperties()다수의 프로퍼티 추가, 속성 변경
getPrototypeOf()prototype에 연결된 프로퍼티 반환
getOwnPropertyNames()프로퍼티 이름을 배열로 반환
keys()열거 가능 프로퍼티 이름 반환
getOwnPropertyDescriptor()디스크립터 속성 반환
preventExtensions()프로퍼티 추가 금지 설정
isExtensible()프로퍼티 추가 금지 여부 반환
seal()프로퍼티 추가, 삭제 금지 설정
isSealed()프로퍼티 추가, 삭제 금지 여부 반환
freeze()프로퍼티 추가, 삭제/변경 금지 설정
isFrozen()프로퍼티 추가, 삭제/변경 금지 여부 반환

Object에 프로퍼티 추가

프로퍼티마다 상태를 가지고 있다. (상태 : 변경/삭제/열거 가능 여부)

1. defineProperty()

구분데이터 (값)
objectObject 오브젝트
파라미터 대상 오브젝트
프로퍼티 이름
속성
반환대상 오브젝트
// 대상 오브젝트에 프로퍼티 추가 또는 프로퍼티 속성 변경
// 상태가 가능일 때만 처리 가능
// 프로퍼티를 추가할 때 상태 결정
var obj = {};
Object.defineProperty(obj,"book",{	// 프로퍼티를 추가할 오브젝트, 프로퍼티 이름, 속성
  value: "Javascript",
  enumerable: true
});
/*
1. 첫 번째 파라미터에 프로퍼티를 추가할 오브젝트(obj) 작성
2. 두 번째 파라미터에 프로퍼티 이름(book) 작성
3. 세 번째 파라미터 {value: "Javascript"}에서
- value는 프로퍼티 값을 나타내는 속성
- "Javascript"는 value의 속성 값. [실행 결과]처럼 프로퍼티 값이 됨.
*/
console.log(obj);

[실행 결과]
{book: Javascript}

2. defineProperties()

구분데이터 (값)
objectObject 오브젝트
파라미터 대상 오브젝트
프로퍼티 이름과 속성
반환대상 오브젝트
//다수의 프로퍼티를 추가하거나 속성 변경
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 valueJS 지원 데이터 타입undefined프로퍼티 값으로 사용
writable true, false false false: value 값 변경 불가
access getFunction Obeject, undefinedundefined프로퍼티 함수
set Function Obeject, undefined undefined 프로퍼티 함
public enumerabletrue, falsefalsefalse: for-in으로열거 불가
configurabletrue, falsefalsefalse: 프로퍼티 삭제 불가

✓ 프로퍼티의 속성 이름과 속성 값을 정의

✓ 디스트립터 타입에 속한 속성만 같이 사용할 수 있음.

→ data 타입과 access 타입은 같이 사용 ✕

ex) value - set ✕

→ data - public / access - public은 같이 사용 가능

1. value 속성

// 프로퍼티 값을 {value: "Javascript"} 형태로 작성
// for-in에서 "Javascript"가 프로퍼티 값이 됨.
// 🚨 value 속성을 get/set 속성과 같이 작성 불가
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 속성

// 프로퍼티 값 변경 가능 여부
// writable: true - 프로퍼티 변경 가능
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  writable: true		// 변경 가능
});
obj.book = "변경 가능";
console.log(obj.book);

[실행 결과]
변경 가능

// writable: false - 프로퍼티 변경 불가(default)
// 🚨 에러가 발생하지 않지만, 값이 변경되지 않음.
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  writable: false		// 변경 불가
});

obj.book = "변경";
console.log(obj.book);

[실행 결과]
Javascript

3. enumerable 속성

// for-in으로 열거 가능 여부
// enumerable: true - 프로퍼티 열거 가능
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  enumerable: true		// 열거 가능
});
for (var name in obj){
  console.log(name + ":" +obj[name]);

[실행 결과]
book:Javascript

// enumerable: false - 프로퍼티 열거 불가(default)
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  enumerable: false		// 열거 불가
});
for (var name in obj){
  console.log(name + ":" +obj[name]);

[실행 결과]

4. configurable 속성

// 프로퍼티 삭제 가능 여부
// configurable: true - 프로퍼티 삭제 가능
// value 이외 속성 변경 가능
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  configurable: true		// 삭제 가능
});
delete obj.book;
console.log(obj.book);

[실행 결과]
undefined

// configurable: false - 프로퍼티 삭제 불가(default)
// value 이외 속성 변경 불가
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  configurable: false		// 삭제 불가
});
delete obj.book;
console.log(obj.book);

[실행 결과]
Javascript
profile
이게 왜 🐷

0개의 댓글