16장 프로퍼티 어트리뷰트

개발쟁이·2021년 4월 1일
0

내부 슬롯, 내부 메서드 : 자바스크립트 엔진 구현 알고리즘 설명위해 ECMAScript 에서 사용하는 의사 플로퍼티, 메서드 [[ ]] 로 감싼 이름들

내부 슬롯과 메서드는 사양대로 구현되어 실제로 동작하나 개발자가 직접 접근은 못함 단 일부 슬롯과 내부 메서드에 한해 간접적 접근 수단 제공.

자바스크립트 엔진이 프로퍼티 생성시, 상태 나타내는 프로퍼티 어트리뷰트를 기본 값으로 자동 정의.

프로퍼티 상태 : [[Value]] ,[[Writeable]], [[Enumerable]], [Configurable]]

Value : 값에 접근하면 반환. 값 변경시 value에값 재할당함.

Writable 프로퍼티 값 변ㄴ경 여부 f일경우읽기 전용

Enumerable 열거여부 f면 반복문 keys로 열거 불가능

Configurablle 재정의가는여부 f, 프로퍼티 삭제 어트리뷰트 값 변경금지

프로퍼티 생성시 , value는 프로퍼티 값으로 초기화, 나머지는 t로초기화됨

Object.getOwnPropertyDescriptor(객체의 참조, 프로퍼티 키 )메서드로 간접적 확인가능

이때 PropertyDescriptor 객체를반환.

프로퍼티는 data, accessor두가지로 구분가능 data는 키와 값으로 구성되어있고 accessor는 값 갖진않고 프로퍼티 값을읽거나 저장할때 호출되는 접근자 함수로 구성됨

접근자 프로퍼티 accessor property

[[Get]] getter함수가 호출되고 그결과가 프로퍼티 값으로 반환

[[Set]] setter함수호출되고 결과가 프로퍼티 값으로 반환

[[Enumerable]]

[[configurable]

proto접근자 프로퍼티 prototype 은데이터 프로퍼티

프로퍼티 정의

Object.defineproperty 하면 프로퍼티 어트리뷰트 정의가능 생략시 false,undefined가기본값
Object.defineProperties 하면여러개 정의가능

객체변경 방지

Object.preventExtensions 프로퍼티 삭제 읽기 쓰기 재정의 → Object.defineProperty 매서드 , 동적 추가 금지
확장 가능 여부는 isExtensible 로 확인 가능
Object.seal 읽기 쓰기 (값 갱신은되나 definedProperty 는 불가능)
IsSealed로확인 가능
Object.freeze 읽기
Object.isFrozen으로확인가능
위 방법은 직속 프로퍼티만 변경 방지, 중첩 객체에는 영향 못끼침
깊은 객체 동결하려면 Object.freeze 메서드를 재귀적으로 호출해야함. (반복문)

profile
개발 인생

0개의 댓글