프록시는 객체에 임의의 동작을 넣기 위해 사용한다.
자바스크립트에는 ES6부터 처음 도입되었다.
프록시란?
프로퍼티 탐색, 할당, 생성자 호출 등 객체 기본 동작에 임의의 로직을 넣기 위해 사용하는 감싸미
용어 정리
- 타깃 : 프록시로 감쌀 객체
- 트랩 : 동작을 가로채는 함수
- 처리기 : 트랩이 있는 객체(처리기가 트랩을 가진다)
프록시 API
Proxy 생성자로 생성하며 다음과 같이 생성함
var proxy = new Proxy(target, handler);
- target : 프록시로 감쌀 객체
- handler : 트랩이 있는 객체
트랩
함수 동작을 가로채는 함수, 반환값을 가로채고 필터링해서 규칙에 부합하지 않으면 TypeError 예외를 발생시킴
트랩 내부에서 this는 항상 처리기를 가리킴
get(target, property, receiver)
점(.) 이나 중괄호로 프로퍼티 값을 조회할 때 사용된다.
receiver는 접근하려는 프로퍼티가 위치한 객체의 참조값이다.
get 이외에도 다음과 같은 객체 메소드들에 대해서 트랩을 지정할 수 있다.
java처럼 임의의 메소드에 대해서 트랩을 지정할 수 있는 것은 아닌듯 하다.
set(target, property, value, receciver)
has(target, property)
isExtensible(target)
getPrototype(target)
setProtoTypeOf(target, prototype)
preventExtensions(target)
getOwnPropertyDescriptor(target, property)
defineProperty(target, property, descriptor)
enumerate(target)
ownKeys(target)
apply(target, thisValue, arguments)
Proxy.revocable(target, handler)
리보커블 프록시는 도중에 취소 가능한 프록시다.
revoke 함수를 호출해서 프록시 기능을 취소할 수 있다.
(다시 살릴 수는 없는건가..?)
'개발 > Front End' 카테고리의 다른 글
React Hook 내용 정리 (0) | 2020.01.10 |
---|---|
[JavaScript] 이미지 사이즈 구하기 (0) | 2017.03.17 |
ECMAScript6 길들이기 - 5 리플렉트 API 구현 (0) | 2016.12.12 |