[16장] 프로퍼티 어트리뷰트

초록귤·2021년 12월 14일
1

1. 내부 슬롯과 내부 메서드

자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다.
ECMAScript사양에 등장하는 이중 대괄호 ([[...]])로 감싼 이름들
내부 로직이므로 직접적으로 접근하거나 호출하는 방법을 제공하지 않는다.
단, 일부는 간접적으로 접근할 수 있는 수단을 제공하기는 한다. [[prototype]]
모든 객체는 프로토타입이라는 내부 슬롯을 갖는다. _ _ proto __를 통해 간접적으로 접근할 수 있다.

Q 호출될까?

const o = {};
o.[[Prototype]]

2. 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체

  • js엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다.
  • 프로퍼티의 상태란 프로퍼티의 <값, 값 갱신 가능 여부, 열거 가능 여부, 재정의 가능 여부> 말함 =>
  • 값 제외 나머지 상태는 불린type으로 true가짐
  • 프로퍼티 어트리뷰트에 직접 접근할 수 없지만
    메서드 Object.getOwnPropertyDescriptor메서드를 이용하여 간접적으로 확인할 수는 있다.
  • 호출할 때, 객체의 참조 전달 / 두번째 매개변수에는 프로퍼티 키를 문자열로 전달.
    => 반환값은 :프로퍼티 어트리뷰트 정보를 제공하는 property Descriptor객체 반환
    만약 존재하지 않으면? undefined가 반환된다.

3. 데이터 프로퍼티와 접근자

데이터 프로퍼티 : 키+값

접근자 프로퍼티 : 자체적으로 값을 갖지않고 다른 데이터 프로퍼티의 값을 읽거나 저장할 때 호출되는 접근자함수로 구성된 프로서티다.

프로퍼티 어트리뷰트

[[Value]] [[Writable]] [[Enumerable]] [[Configurable]]
Value의 값은 프로퍼티 값으로 초기화 , 나머지 값은 true로 초기화

접근자 프로퍼티는

[[Get]] [[Set]] [[Enumerable]] [[Configurable]]
접근자 함수는 getter/ setter 함수 .

prototype

  • 어떤 객체의 상위(부모) 객체 역할을 하는 객체다.
  • 하위(자식) 객체에게 자신의 프로퍼티와 메서드를 상속한다.
  • 상속받은 하위 객체는 자신의 프로퍼티 또는 메서드인 것처럼 자유롭게 사용할 수 있다.
  • 프로토 타입체인은 프로토타입이 단방향 링크드 리스트형태로 연결되어 있는 상속구조.
  • 객체의 프로퍼티나 메서드에 접근하려고 할 때, 해당 객체에 접근하려는 프로퍼티 또는 메서드가 없다면 프로토타입 체인을 따라 프로토타입의 프로퍼티나 메소드를 차례대로 검색한다.
    19장 프로토타입에서 추가 다룸

4.객체 변경 방지

객체는 변경 가능한 값이므로 재할당없이 직접 변경할 수 있다.

객체밀봉

Object.seal 메서드 => 프로퍼티 추가 및 삭제와 프로퍼티 어트리뷰트 재정의 금지 의미 . 읽기와 쓰기만 가능!


1. o._ _proto__

profile
초록색 귤이 노랑색으로 익어가듯, 실력이 익어가기 위해 노력하는 개발자 lahee입니다. 프론트엔드 개발자를 목표로 성장하고 있습니다.

0개의 댓글