거꾸로 바라본 세상
반응형

객체 프로퍼티와 프로퍼티 속성

자바스크립트에서 객체는 논리적인 프로퍼티의 집합이며 속성(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);
}*/
반응형
profile

거꾸로 바라본 세상

@란지에。

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!