Reflect API는 Reflection이라는 개념(런타임 시점에 사용되는 자신의 구조와 행위를 관리하고 수정하는 개념)이 들어간 자바스크립트 내장 객체로 Proxy와 같이 자바스크립트 명령 중간에 실행할 수 있는 기능이다.
1. Reflect.get, Reflect.set
대표적인 Reflect api로는 get, set이 있다. 먼저 MDN에 나와있는 Reflect.get 예제 코드를 보게 되면 아래와 같다
1-1. Reflect.get
// Reflect.get(target, propertyKey, receiver?)
// MDN 예제 코드
const object1 = {
x: 1,
y: 2
};
console.log(Reflect.get(object1, 'x'));
// Expected output: 1
const array1 = ['zero', 'one'];
console.log(Reflect.get(array1, 1));
// Expected output: "one"
일단 Reflect api는 객체가 아닌 다른 타입에 접근하면 에러를 리턴한다. 위의 예제 코드처럼 'target' 파라미터로 객체에 접근해서 'propertyKey'로 원하는 키값에 접근할 수 있다. (자바스크립트에서 배열은 객체로 분류되기 때문에 배열의 인덱스 값으로 접근이 가능함)
1-2. Reflect.set
마찬가지로 MDN에 나와있는 예제 코드를 보면 아래와 같다.
// Reflect.set(target, propertyKey, value, receiver?)
// MDN 예제 코드
const object1 = {};
Reflect.set(object1, 'property1', 42);
console.log(object1.property1);
// Expected output: 42
const array1 = ['duck', 'duck', 'duck'];
Reflect.set(array1, 2, 'goose');
console.log(array1[2]);
// Expected output: "goose"
예제 코드를 보면 'target' 파라미터로 원하는 객체에 접근해서 'propertyKey' 파라미터를 키값으로 'value' 파라미터로 원하는 벨류 값을 집어넣는다. 배열일 경우에는 원하는 인덱스에 집어넣을 수 있다.
2. 그외 Reflect api 들
get, set 말고도 아래와 같은 메서드들을 제공한다.
has() : 객체 내부에 값을 판별하여 boolean 값으로 리턴하는 메서드
deleteProperty() : 객체 내부의 특정 키값의 벨류값을 undefinded로 변경
apply() : 함수 호출
constructor : 생성자 호출
getPrototypeOf : Object.getPrototypeOf
setPrototypeOf : Object.setPrototypeOf
preventExtensions: Object.preventExtensions
getOwnPropertyDescriptor : Object.getOwnPropertyDescriptor
ownKeys : Object.getOwnPropertyNames | Object.getOwnPropertySymbols
isExtensible : Object.isExtensible