🍭 교재 전체내용 정리 포스팅 아님 스터디에서 언급된 내용 위주 포스팅
스터디 이후에 스스로 보충이 필요한 부분은 JS Deep Dive 교재를 재독 후 정리(작은 글씨)
2021.09.07 오픈JS스터디 #3
스터디 진도 : 실행컨텍스트,스코프,전역변수,Let,Const,프로퍼티 어트리뷰트,생성자함수
BACKGROUND KNOWLEDGE
JS엔진이 구현알고리즘을 위해 사용하는 내부 슬롯intenal slot과 내부메서드internal method는
의사 프로퍼티pseudo property와 의사 메서드 pseudo method이다.
이중괄호[[]]형태
But 내부슬롯과 내부 메서드는 외부로 공개된 property X
원칙적으로 직접 접근 X 일부는 간접 접근이 가능한 수단 있음
=> [[property]] 내부 슬롯은 __proto__통해서 indirect access 가능
0.__proto__
ES6 이전에 브라우저들이 0.__proto__
로 비표준으로 사용하고 있어서
ES6에서 표준으로 만들었지만, 없앨 예정
Object.getPrototypeOf
쓰는 것 권장
Object.getPrototypeOf
1. JS엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 property attribute 기본값으로 정의.
2. property attribute는 내부슬롯으로
[[value]], [[Writable]], [[Enumerable]], [[Configurable]]이 있음
3. Object.getPrototypeOf 메서드로 간접 확인 가능
4.ES8에서 Object.getOwnPropertyDescrioptors 로
모든 프로퍼티의 property attribute 정보 주는 프로퍼티 디스크립터 객체 반환!
Object.getPrototypeOf
로 접근 시 보이는 내용 =>0.__proto__
와 같음
BACKGROUND KNOWLEDGE
프로퍼티 데이터는 데이터 프러퍼티와 접근자 프로퍼티가 있음
data property : 키와 값으로 구성된 일반적인 property
JS가 프러퍼티 생성때 default로 자동 정의함
[[value]],[[Writable]], [[Enumerable]], [[Configurable]] =>
각각의 초기화 값: 프로퍼티값, true, true ,true
Enumerable이 false이면 for/in,Object.keys로 순회 불가능
함수 객체의 prototype 은 데이터 프로퍼티(실존 객체)
accessor property : 자체적인 값 없음
data property의 값을 읽거나 저장할 때 호출되는 접근자 함수(게터,세터)로 구성
[[get]],[[set]] 등
일반객체의 __proto__는 접근자 프로퍼티임
새로운 프로퍼티를 추가하면서 property attribute를 명시적으로 정의하거나,
기존 프로퍼티의 property attribute를 재정의 하는 것.
`Object.defineProperty
사용함
예1)
데이터 프로퍼티에 정의 & 확인
예2)
데이터 프로퍼티에 value만 정의 & 확인
삭제/변경 불가!
enumerable => false(열거도 불가능)
Object.defineProperties
한꺼번에 여러개 프로퍼티 정의 가능
일반적으로 JS에서 객체를 다루는 기법 X
more like => 객체를 바꿀 수 없게 모든 프로퍼티에 재귀적으로 Object.freeze 메서드 호출
[예제 16-14 의 deepFreeze레퍼런스의 github repo 확인
]
deep dive 교재 16장 github repo
https://github.com/wikibook/mjs/blob/master/16.md