Object 그리고 Object.defineProperty

Judy·2022년 1월 12일
0

JavaScript

목록 보기
14/14
post-thumbnail

9월 스터디 자료 + 추가 내용을 기록

1. Object 발표 PPT

2. 객체 속성 기술자

Object.defineProperty

  • 속성 기술자 (Property Descriptor)
    : 자바스크립트의 모든 객체 속성은 자기 자신에 대한 정보를 담고 있는 속성 기술자를 가지고 있다.
  • 객체로 표현
  • Object.getOwnPropertyDescriptor를 통해 속성 기술자 객체를 가져올 수 있다.
let user = {
    name: "jeado"
};
let descriptor = Object.getOwnPropertyDescriptor(user,'name');
console.log(descriptor);


  • Object.defineProperty 통해 해당 객체 속성을 정의.
  • 첫번째 인자 = 속성을 정의할 객체
    두번째 인자 = 속성명
    세번째 인자 = 속성 기술자

속성 기술자가 개진 객체로서의 속성

  • value : 값을 나타낸다.
  • enumerable: for-in 루프나 Object.keys메소드같이 속성을 나열할 때 나열 가능 여부를 정의. false일 경우 나열되지 않는다.
  • writable: 값을 변경할 수 있는 여부를 정의. false일 경우 값이 변하지 않는다.
  • configurable: 속성 기술자를 변경할 수 있는 여부를 정의. false일 경우 속성 기술자를 다시 변경할 수 없다.
let user2 = {};
Object.defineProperty(user2,"name", {   
    value: "jeado",                    
    enumverable:true,
    configurable:true,
    writable:false
});
console.log(user2.name);
user2.name = "bbo";    
console.log(user2.name);

  • 왜? writable 속성을 false로 주었기 때문.

let user3 = {
    name: "jeado",
    toString() {
        return this.name;
    }
};
Object.defineProperty(user3,"toString",{
    enumerable:false
});
for (let key in user3){
    console.log(key);   
}

  • 왜? enumerable을 false로 정의했기 때문.

let user4 ={};
Object.defineProperty(user4, "name", {
    value:"jeado",
    configurable:false
});
delete user4.name   
console.log(user4);

Object.defineProperty(user4, "name", {
    writable:true
});

  • 왜? configurable를 false로 정의하였기 때문.

profile
영원히 공부하는 멋진 장선생!!

0개의 댓글