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

newsilver·2021년 6월 9일
0

Javascript

목록 보기
7/16
post-thumbnail

getter, setter

1. get 속성

// 프로퍼티로 값을 구할 때 value 속성이 없으면 get 속성 호출.(=getter)
var obj = {};
Object.defineProperty(obj, "book", {
  get: function(){
    return "Javascript";
  }
});
var result = obj.book;		// obj.book의 get 함수가 호출되어
console.log(result);		// get 함수에서 "Javascript" 반환
				// 반환된 "Javascript"를 result 변수에 할당
[실행 결과]
Javascript

2. set 속성

// 프로퍼티에 값을 할당할 때 value 속성이 없으면 set 속성 호출.(=setter)
var obj = {}, data = {};
Object.defineProperty(obj, "book", {
  set: function(param){
    data.title = param;
  },
  get: function(){
    return data.title;
  }
});
obj.book = "Javascript";	// obj.book의 get 함수가 호출되어
console.log(obj.book);		// get 함수에서 data.title을 반환
				// setter에서 설정한 "Javascript"가 반환됨.
[실행 결과]
Javascript

ES5 Object 함수

프로퍼티 추출

1. getPrototypeOf()

구분데이터 (값)
objectObject 오브젝트
파라미터대상 인스턴스
반환프로퍼티
// 파라미터의 prototype에 연결된 프로퍼티 반환
function Book(point){
  this.point = point;
};
Book.prototype.getPoint = function(){};
Book.prototype.setPoint = function(){};
var obj = new Book(100);

var result = Object.getPrototypeOf(obj);
for (var key in result){
  console.log(key + ":" + result[key]);
};
/*
1. 파라미터에 인스턴스를 작성
2. 인스턴스를 생성한 function 오브젝트의 prototype에 연결된 프로퍼티를 반환
3. 생성자 함수인 Book을 작성하거나 Book.prototype을 작성하면 반환하지 않는다.
4. this.point는 prototype에 연결되어 있지 않으므로 반환 ✕
*/

[실행 결과]


2. getOwnPropertyNames()

구분데이터 (값)
objectObject 오브젝트
파라미터대상 오브젝트
반환[프로퍼티 이름]
// 오브젝트의 프로퍼티 이름을 배열로 반환
// 열거 가능 여부 체크 ✕
// 다른 오브젝트에서 받은 프로퍼티를 제외
var obj = {};
Object.defineProperties(obj, {
  book: {value: "책"},
  point: {value: 123}
});
var names = Object.getOwnPropertyNames(obj);
for (var k = 0; k < names.length; k++){
  console.log(names[k]);
};

[실행 결과]
book
point

3. keys()

구분데이터 (값)
objectObject 오브젝트
파라미터대상 오브젝트
반환프로퍼티 이름
// 열거 가능 프로퍼티 이름 반환 (enumarable: true)
var obj = {};
Object.defineProperties(obj, {
  book: {
    value: "책", enumarable: true
  },
  point: {value: 123}		// point는 enumarable: false 이므로 반환 ✕
});
var names = Object.keys(obj);
for (var k = 0; k < names.length; k++){
  console.log(names[k]);
};

[실행 결과]
book

프로퍼티 디스크립터 함수

함수 \ 프로퍼티추가삭제변경
preventExtensions()T/F
isExtensible()R
seal()T/FT/F
isSealed()RR
freeze()T/FT/FT/F
isFrozen()RRR

1. getOwnPropertyDescriptor()

구분데이터 (값)
objectObject 오브젝트
파라미터 대상 오브젝트
프로퍼티 이름
반환디스크립터
// 프로퍼티 디스크립터의 속성 이름, 값 반환
// 다른 오브젝트에서 받은 프로퍼티는 제외
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

2. preventExtensions()

// 오브젝트에 프로퍼티 추가 금지 설정
// 프로퍼티  삭제, 변경은 가능
// 추가 금지 설정 후 추가 가능으로 변경 불가
var obj= {};
Object.preventExtensions(obj);
try{
  Object.defineProperty(obj, "book", {
    value: "Javascript"
  });
} catch(e) {
  console.log("추가 불가");
};

[실행 결과]
추가 불가

3. isExtensible()

// 오브젝트에 프로퍼티 추가 금지 여부 반환
// true: 추가 가능, false: 추가 불가
var obj= {};
  Object.defineProperty(obj, "book", {
    value: "Javascript"
  });
console.log(Object.isExtensible(obj);
            
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj);
};

[실행 결과]
true
false

4. seal()

// 오브젝트에 프로퍼티 추가, 삭제 금지 설정
// 추가 금지는 오브젝트 단위, 삭제 금지는 프로퍼티 단위로 설정
// 변경 가능
var obj= {};
Object.defineProperty(obj, "book", {
    value: "Javascript", writable: true
});

Object.seal(obj);
try{
  Object.defineProperty(obj, "sports", {
    value: "스포츠"
  });
} catch(e) {
  console.log("추가 불가");
};

[실행 결과]
추가 불가

5. isSealed()

// 오브젝트에 프로퍼티 추가,삭제 금지 여부 반환
// true: 불가, false: 가능
var obj= {};
Object.defineProperty(obj, "book", {
    value: "Javascript", writable: true
});
console.log(Object.isSealed(obj));

Object.seal(obj);
console.log(Object.isSealed(obj));

[실행 결과]
false
true

6. freeze()

// 오브젝트에 프로퍼티 추가, 삭제, 변경 금지 설정
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript". writable: true
});

Object.freeze(obj);
try {
  Object.defineProperty(obj, "book" {
      value: "포인트"
  }); 
} catch(e) {
  console.log("변경 불가");
};
console.log(obj.book);

[실행 결과]
변경 불가
Javascript

7. isFrozen()

// 오브젝트에 프로퍼티 추가, 삭제, 변경 금지 여부 반환
// true: 불가, false: 가능
var obj = {};
Object.defineProperty(obj, "book", {
  value: "Javascript",
  writable: true
});
console.log(Object.isFrozen(obj));

Object.freeze(obj);
console.log(Obejct.isFrozen(obj));

[실행 결과]
false
true
profile
이게 왜 🐷

0개의 댓글