반응형
객체 프로퍼티와 프로퍼티 속성
자바스크립트에서 객체는 논리적인 프로퍼티의 집합이며 속성(Attributes)은 프로퍼티의 상태를 정의하고 설명하는데 사용한다.
프로퍼티의에는 데이터 프로퍼티(Data Property)
, 접근 프로퍼티(Access Property)
가 있다.
데이터 프로퍼티(Data Property)
- value : 자바스크립트의 모든 자료형
- writeable : 데이터 프로퍼티의 변경가능 여부 정의
- enumerable : for-in 구분을 이용해 열거 가능 여부 정의
- configurable : 제거 가능 여부, 접근 프로퍼티 변경 여부, 쓰기 불가 여부, enumerable 속성의 수정 가능여부 정의
접근 프로퍼티(Access Property)
- get 접근자(get accessor) : Function 객체 혹은 undefined지정
- set 접근자(set accessor) : Function 객체 혹은 undefined지정
- enumerable : for-in 구문을 이용해 열거 가능여부 정의
- configurable : 제거 가능 여부, 데이터 프로퍼티의 변경가능여부, 다른 송성들의 수정 가능여부 정의
//defineProperty를 통한 객체 프로퍼티수정
function User(name, department) {
let _department = department;
let _name = name;
Object.defineProperty(this, 'name', {
value: _name,
writable: true,
enumerable: true,
configurable: false
});
Object.defineProperty(this, 'department', {
get: () => {
console.log('Retrieving department');
return _department;
},
set: (newValue) => {
console.log(`Updating department value to ${newValue}`);
_department = newValue;
},
enumerable: true,
configurable: true
});
Object.defineProperty(this, 'greeting', {
value: () => {
console.log(`Hi I'm ${_name}`);
},
enumerable: false,
configuration: false
});
}
var user = new User('Paik','Programmer');
console.log(user.department);
console.log(user.name);
user.greeting();
user.department = 'software';
console.log(user.department);
//Exception enumerable : false 이므로 for 가 안됨.
/*Object.defineProperty(user, 'name', {
enumerable: false
});
delete user.name;
delete user.department;
for (var u in user) {
console.log(u);
}*/
반응형
'Language > Javascript' 카테고리의 다른 글
[ES6] Arrows (0) | 2023.04.20 |
---|---|
[ES6] Scope 연산자 let, const (0) | 2023.04.20 |
[JS] 호이스팅(Hoisting) (0) | 2023.04.20 |
[JavaScript]브라우저명과 모바일, PC브라우저 체크 (0) | 2016.04.14 |
[JavaScript] 5자리 인증번호 만들기 (0) | 2016.04.11 |