자바스크립트 엔진의 구현 알고리즘을 설며하기 위한 의사 프로퍼티, 의사 메서드
형태
자바스크립트 엔진 내부 로직이기 때문에 직접적인 접근과 호출 방법은 제공 하지않고 간접적인 접근만을 허용한다
[[value]] value: 프로퍼티 키를 통해 값에 접근하면 반환되는
변경하면 [[value]] 재할당
없으면 동적 생성하고 [[value]]에 값 저장
[[writable]] writable: 값의 변경 가능 여부(불리언값), false일 경우 읽기전용 프로퍼티
[[enumerable]] enumerable: 열거 가능 여부(불리언값), false 열거 불가능
[[configurable]] configurable: 재정의 가능 여부(불리언값), false 삭제, 프로퍼티 어트리뷰트 값 변경 불가
[[writable]]이 true이면 [[value]]의 변경과 [[writable]]을 false로 변경 허용
[[get]], get: 값을 읽을 때 호출되는 접근자 함수
getter함수 호출 -> 프로퍼티 값 반환
[[set]], set: 값의 저장 호출 접근자 함수
setter함수 호출 -> 프로퍼티 값 저장
[[enumerable]] enumerable
[[configurable]] configurable 동일
const person = {
firstName: 'Ungmo',
lastName: 'lee',
// get동작
// 프로퍼티 키의 유효성 체크
// 프로토타입 테입에서 프로퍼티 검색
// 데이터, 접근자 프로퍼티인지 확인
// getter 함수를 호출하고 그 값 반환
get fullName(){
return `${this.firstName} ${this.lastName}';
},
set fullName(){
[this.firstName, this.lastName] = name.split(' ');
}
};
Object.defineProperty(객체의 참조, 프로퍼티키, 디스크립터 객체(프로퍼티 어트리뷰트 값))
Object.defineProperties: 여러 개 정의
//프로퍼티 디스크립터 객채의 기본 값
undefined(value, get, set)
false(writable, enumerable, configurable)