자바스크립트에도 자바처럼 리플렉션 기능이 있는데 ES6는 객체 리플렉션 가능한 새 리플렉션 API를 도입했음.
ES5 시절에도 있었지만 체계가 없었고 실패하면 예외가 발생했다. ES6 리플렉션에서는 성공 여부로 true/false를 반환한다.
Reflect 객체
ES6 전역 Reflect 객체에 객체 리플렉션에 대한 모든 메소드가 있다.
함수 객체가 아니므로 호출할 수 없고 new 연산자를 붙여 사용할 수도 없다.
Reflect 객체의 메소드에 대해 하나씩 살펴본다.
Reflect.apply(function, this, args)
- function : 타깃 함수
- this : 타깃 함수 내부의 this값
- args : 타깃 함수의 인자를 지정한 배열 객체
주어진 this 값으로 타깃 함수 function을 args 인자와 함께 호출한다.
Reflect.construct(construct, args, prototype)
- construct : 타깃 생성자
- args : 타깃 생성자의 인자 배열
- prototype : 타깃 생성자의 prototype으로 사용할 생성자
함수를 생성자로 실행하는 메소드
new 연산자와 비슷함. new 대신 쓰는 이유는 경우에 따라 한 생성자의 prototype과 다른 생성자의 prototype을 매치시켜야 하기 때문.
Reflect.defineProperty(object, property, descriptor)
- object : 프로퍼티를 정의/수정할 객체
- property : 정의/수정할 프로퍼티명 또는 심볼
- descriptor : 정의/수정할 프로퍼티의 서술
객체에 새 프로퍼티를 정의하거나 기존 프로퍼티를 수정하는 메소드
데이터 프로퍼티와 접근자 프로퍼티
ES5부터 모든 객체의 프로퍼티는 데이터 프로퍼티, 접근자 프로퍼티 둘 중 하나다.
데이터 프로퍼티는 쓰기 가능 또는 불가 상태 값을 가지고
접근자 프로퍼티는 게터-세터 함수를 가진다.
Reflect.deleteProperty(object, property)
- object : 타깃 객체
- property : 삭제할 프로퍼티명
객체 프로퍼티를 삭제한다. 성공 여부 true/false 반환
Reflect.enumerate(object)
- object : 타깃 객체
주어진 객체 자신의 열거 가능한 프로퍼티와 상속받은 열거 가능 프로퍼티를 이터레이터 객체로 반환
Reflect.get(object, property, this)
- object : 타깃 객체
- property : 프로퍼티명
- this : 프로퍼티가 접근자 프로퍼티일 경우 get 함수 내부의 this값 지정
프로퍼티 값을 조회하는 메소드
Reflect.set(object, property, value, this)
- object : 타깃 객체
- property : 프로퍼티명
- value : 프로퍼티 값
- this : 접근자 프로퍼티일 경우 get 함수 내부의 this값 지정
객체 프로퍼티 값을 지정하는 메소드
Reflect.getOwnPropertyDescriptor(object, property)
- object : 타깃 객체
- property : 프로퍼티명
객체 프로퍼티의 서술자를 조회하는 메소드
Reflect.getPrototypeOf(object)
객체 프로토타입 값을 조회하는 메소드
Reflect.setPrototypeOf
내부 [[prototype]] 값을 지정하는 메소드
Reflect.has(object, property)
주어진 객체에 어떤 프로퍼티가 존재하는지 true/false로 반환한다
Reflect.isExtensible(object)
확장 가능한 객체인지(이 객체에 새로운 프로퍼티를 추가할 수 있는지) 확인, true/false 반환
Reflect.preventExtensions(object)
객체를 확장할 수 없게 하는 메소드
Reflect.ownKeys(object)
객체 자신의 프로퍼티 키를 원소로 담은 배열을 반환
상속한 프로퍼티는 무시함
'개발 > Front End' 카테고리의 다른 글
React Hook 내용 정리 (0) | 2020.01.10 |
---|---|
[JavaScript] 이미지 사이즈 구하기 (0) | 2017.03.17 |
ECMAScript6 길들이기 - 6 프록시 (0) | 2016.12.13 |