모던자바스크립트 16장 프로퍼티 어트리뷰트

연호·2022년 12월 23일
0

모던자바스크립트

목록 보기
11/28

프로퍼티 어트리뷰트

  1. 내부 슬롯과 내부 메서드는 자바스크립트의 엔진 구현 알고리즘을 설명하기 위해 사용하는 의사 프로퍼티와 의사 메서드이다.

  2. 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본 값으로 자동 정의한다. 프로퍼티 어트리뷰트의 내부 상태 값인 내부 슬롯에는 [[value]], [[Writable]], [[Enumerable]], [[Configurable]]이 있다.

const person = {
  name : "kim"
}

//Object.getOwnPropertyDescriptor 메서드는 프로퍼티 어트리뷰트의 정보를 제공하는 프로퍼티 디스크립터 객체를 반환한다.

Object.getOwnPropertyDescriptor(person, 'name');
//{value : "kim", writable : true, enumerable : true, configurable : true}
  1. 지금까지 살펴본 일반적인 프로퍼티를 데이터 프로퍼티라고 한다. 데이터 프로퍼티는 위의 4가지 프로퍼티 어트리뷰트가 기본값으로 자동 정의된다.

  2. 접근자 프로퍼티는 자체적으로 값을 갖지 않고 다른 데이터 프로퍼티의 값을 읽거나 저장할 때 사용하는 접근자 함수로 구성된 프로퍼티이다. [[Get]], [[Set]], [[Enumerable]], [[Configurable]] 프로퍼티 어트리뷰트를 갖는다. 접근자 함수는 getter/setter 함수라고도 부른다. 모두 정의할 수 도, 하나만 정의할 수도 있다.

const person = {
  //데이터 프로퍼티
  firstname: "GilDong",
  lastname : "Hong"
  
  //getter 함수
  get fullname() {
    return `${this.firstname} ${this.lastname}`;
  }
  //setter 함수 
  set fullName(name){
    //배열 디스트릭처링 할당
    [this.firstname,this.lastname] = name.split("");
  }
}

console.log(person.firstname + "" + person.lastname); //GilDong Hong
  1. object.defineProperty 매서드를 활용하여 프로퍼티의 어트리뷰트를 정의할 수 있다.
const person = {};

//데이터 프로퍼티 정의
object.defineProperty(person, 'firstName' , {
  value: "Gildong",
  writable : true,
  enumerable : true,
  configurable: true
});
  1. object.preventExtensions 메서드는 객체의 확장을 금지한다. 즉, 프로퍼티의 추가가 금지된다. Object.isExtensible 메서드로 확장 가능 객체 여부 확인가능
const person = {firstname: "GilDong"};

object.preventExtensions(person);

person.age = 20; //무시된다. delete 메서드로 삭제는 가능.
  1. Object.seal 메서드는 객체를 밀봉하여 읽기와 쓰기만 가능하다. 그러나 프로퍼티 값 갱신은 가능하다.
  2. object.freeze 메서드는 객체를 동결한다. 읽기만 가능하다. 하지만 중첩객체까지 동결할 수 없다.
profile
뉴비

0개의 댓글