[JS Log] 프로퍼티 어트리튜브

2023. 9. 27. 16:57Trip to JavaScript

16.1 내부 슬롯과 내부 메서드

 

메모 > 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다. ECMAScript 사양에 등장하는 이중 대괄호([[]])로 감싼 이름들이 내부 슬롯과 내부 메서드다.

 

나의 감상 > 자바스크립트 엔진이 사용한다는 것에 방점이 찍히는 것 같다.    

 

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

 

메모 > 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 상태란 프로퍼티의 값, 값의 갱신 가능 여부, 열거 가능 여부, 재정의 가능 여부를 말한다.

 

나의 감상 > meta-property라는 이야기가 나오는데, 즉 프로퍼티의 속성을 나타내주는 속성들이라고 할 수 있을 것 같다. 

 

16.3 데이터 프로퍼티와 접근자 프로퍼티

 

메모 > 

 

* 데이터 프로퍼티: 키와 값으로 구성된 일반적인 프로퍼티다. 지금까지 살펴본 모든 프로퍼티는 데이터 프로퍼티다.

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

 

나의 감상 > 객체에서 보통 프로퍼티와 메서드를 의미하는 듯

 

16.4 프로퍼티 정의 

 

메모 > 프로퍼티 정의란 새로운 프로퍼티를 추가하면서 프로퍼티 어트리뷰트를 명시적으로 정의하거나, 기존 프로퍼티의 어트리뷰트를 재정의하는 것을 말한다. 예를 들어, 프로퍼티 값을 갱신 가능하도록 할 것인지, 프로퍼티를 열거 가능하도록 할 것인지, 프로퍼티를 재정의 가능하도록 할 것인지 정의할 수 있다.

 

나의 감상 > Object.defineProperty 메서드로 가능하다는데 이 걸 사용할 일이 있을까 싶다. 이전에 4개 속성을 정의할 수 있는데 정의안하면 기본 값이 undefined, false라고 한다.

 

16.5 객체 변경 방지

 

메모 > 

 

나의 감상 > 메서드에 따라 변경 범위가 다르다. 확장 금지 객체는 추가 금지, 봉인 객체는 속성 변경과 삭제 금지, 동결은 값 변경까지 금지시키고 읽기만 가능하다. ReadOnly를 만들어 버린다.

 

 

16.5.4 불변 객체

 

메모 > 지금까지 살펴본 변경 방지 메서드들으 얕은 변경 방지로 직속 프로퍼티만 변경이 방지되고 중첩 객체까지는 영향을 주지는 못한다. 따라서 Object.freeze 메서드로 객체를 동결하여도 중첩 객체까지 동결할 수 없다.

 

function deepFreeze(target) {
if (target && typeof target === 'object' && !Object.isFrozen(target)) {
Object.freeze(target);
Object.keys(target).forEach(key => deepFreeze(target[key]));
}
return target;
}

 

블로그를 옮기고 처음으로 정돈되게 정리해보았다. 생각보다 힘들다.

'Trip to JavaScript' 카테고리의 다른 글

[JS Log] Ajax  (0) 2023.10.07
[JS Log] 비동기 프로그래밍  (1) 2023.10.07
[JS Log] 좀 더 클로저  (0) 2023.10.06
[JS Log] 클로저  (1) 2023.10.06
[JS Log] 자바스크립트 모듈 시스템을 알아보자  (0) 2023.10.02