
JavaScript에서 객체의 속성 (property)은 다양한 속성(attribute)을 가질 수 있다.
속성을 부여할 때 내부 상태값인 내부 슬롯이 property attributes이다.
= 키와 값으로 형성된 실질적 값을 갖고있는 프로퍼티
1)value - 실제 프로퍼티 값
2)writable - 값을 수정 할 수 있는지 여부. false로 설정하면 프로퍼티 값을 수정 할 수 없다.
3)enumrable - 열거가 가능한지 여부이다. for...in 룹 등을 사용 할 수 있으면 true를 반환한다.
4)configurable - 프로퍼티 어트리뷰트의 재정의가 가능한지 여부를 판단한다.
false일 경우 프로퍼티 삭제나 어트리뷰트 변경이 금지된다.
단 writable이 true인 경우 값 변경과 writable변경하는건 가능하다.
= 자체적으로 값을 갖고 있지 않지만 다른 값을 가져오거나 생성할때
호출되는 함수로 구성된 프로퍼티
1)get - 접근자 프로퍼티를 통해 데이터 프로퍼티의 값을 읽을 때 호출되는 접근자 함수.
2)set - 접근자 프로퍼티를 통해 데이터 프로퍼티의 값을 저장할 때 호출되는 접근자 함수.
const squatPr = {
name: '스쿼트',
weight: 165,
get leftWeight() {
return 500 - this.weight;
},
set leftWeight(otherWeights) {
this.weight = 500 - otherWeights;
},
};
console.log(Object.getOwnPropertyDescriptor(squatPr, 'name'));
/*
{ value: '스쿼트', writable: true, enumerable: true, configurable: true }
*/
Object.defineProperty(squatPr, 'weight', {
value: 170,
writable: true,
enumerable: true,
configurable: true,
});
1) Object.getOwnproperyDescriptor을 이용해 키값에 대한 내부 슬롯을 볼 수 있다.
2) Object.defineProperty를 사용해 프로퍼티의 어트리뷰트들을 정의 할 수있다.