ECMAScript 5에서 Object 객체에 추가된 메소드
8.11.1 객체 속성 추가
Object 객체에 속성을 추가하는 메소드
– Object.defineProperty(객체, 속성이름, 속성관련옵션);
인자 설명
– 객체: 속성을 추가하려는 객체 – 속성이름: 추가하려는 속성의 이름
– 속성관련옵션: 추가하려는 속성과 관련된 여러 가지 옵션
• 표 8-20
• value:이 속성에 들어갈 값 지정
• writable: 이 속성의 값을 수정할 수 있는지 지정
• get: getter 메소드 지정
• set: setter 메소드 지정
• configurable: 이미 추가한 속성의 설정을 변경할 수 있는 지 지정
• enumerable: for in 반복문으로 검사할 수 있는지 지정
8.11.1 객체 속성 추가
Object 객체에 속성을 추가하는 메소드
– Object.defineProperty(객체, 속성이름, 속성관련옵션);
코드 8-57
– name 속성의 값을 변경할 수 없으며, for in 반복문으로 접근할 수 없음
코드 8-58
– set 옵션과 get 옵션 이용
– setter와 getter는 필요 시 자동으로 호출됨
• 코드 8-59 (캡슐화에 이용함)
코드 8-60
– name 속성의 configurable 옵션을 true로 했으므로, name 속성의 옵 션을 재지정할 수 있음
8.11.2 객체 생성
ECMAScript 5의 객체 생성 메소드
– Object.create(원본객체, 추가하고자하는속성및옵션)
인자
– 원본객체: 객체 생성 시 복제하고자 하는 원본 객체
– 추가하고자하는속성및옵션: 복제한 객체에 추가하고자 하는 속성과 이 속성의 옵션 지정
코드 8-62
– 빈 객체를 기반으로 name과 region 속성을 추가함
코드 8-63
– create( ) 메소드는 기존의 객체를 복제하므로, 상속이라고 볼 수 있음 – getOwnPropertyNames( ) 나 keys( ) 메소드를 사용하면, 새로 추가한
속성만 얻어옴
– 물론, 새로 생성된 객체를 통해서 기존 객체의 속성을 접근할 수는 있 음
8.11.3 동적 속성 추가 제한
ECMAScript 5의 동적 속성 추가를 제한하는 메소드
– Object.preventExtensions(객체)
매개변수인 객체에 동적으로 속성을 추가하는 것을 금지하는 메소 드
– Object.isExtensible(객체)
매개변수인 객체에 속성 추가가 가능한지 검사하는 메소드 – 코드 8-65
Object.preventExtensions(object) 실행 후에는, 속성을 추가하는 것 이 불가능함
8.11.4 동적 속성 삭제 제한
ECMAScript 5의 동적 속성 삭제를 제한하는 메소드
– Object.seal(객체)
매개변수인 객체에 동적으로 속성을 제거하는 것을 금지하는 메소 드
– Object.isSealed(객체)
매개변수인 객체에 속성 제거가 가능한지 검사하는 메소드 – 코드 8-66
Object.seal(person) 실행 후에는, 속성을 제거하는 것이 불가능함
속성 제거 시에는, delete 키워드를 사용한다.
– 예: delete person.name;
8.11.4 동적 속성 삭제 제한
ECMAScript 5의 동적 속성 삭제/수정을 제한하는 메소드
– Object.freeze(객체)
매개변수인 객체의 속성을 삭제하거나 속성의 값을 수정하지 못하 도록 하는 메소드
– Object.isFrozen(객체)
매개변수인 객체의 속성을 삭제하거나 속성의 값을 수정하지 못하 는지 검사하는 메소드
8.11.5 객체 보조 메소드
ECMAScript 5의 객체 보조 메소드
– Object.keys(객체)
enumerable 옵션이 true인 속성들을 배열로 만들어서 리턴함
defineProperty( ) 메소드로 속성을 추가하면, 이 속성의 enumerable 옵션의 값은 기본적으로 false 이다.
다른 방법으로 속성을 추가하면, enumerable 옵션의 값이 true임
– 예: object.age = ‘30’; 에서의 age 속성
– Object.getOwnPerpertyNames(객체)
매개변수인 객체가 스스로 지닌 모든 속성을 배열로 만들어서 리턴 함
– 코드 8-67
8.11.5 객체 보조 메소드
ECMAScript 5의 객체 보조 메소드
– Object.getOwnPropertyDescriptor(객체, 속성이름)
매개변수인 객체의 특정 속성의 옵션 객체를 추출하는 메소드
코드 8-68
– Object.getOwnPropertyDescriptor(person, ‘name’);
– defineProperty( ) 메소드로 속성을 추가하면
• writable, enumerable, configurable 속성이 모두 false 임을 알 수 있다.
• 예: object 객체의 region 속성