proxy 객체를 사용하면 한 객체에 대한 기본 작업을 가로채고 (함수에선 hooking이라고 함) 재정의하는 프록시를 만들 수 있다.
원래 obj대신 사용할 있는 객체를 만들지만 이 객체의 속성 가져오기, 설정, 정의등의 기본적인 작업을 재정의한다.
일반적으로 속성 엑세스 기록, 입력의 유효성 검사, 형식 지정, 삭제에 사용
보통 매개변수 2개를 이용해 Proxy를 생성한다.
target : 프록시 할 원본 객체
handler : 가로채는 작업, 가로채는 작업을 재정의하는 방법을 정의하는 객체
const target = {
msg1 : 'hello',
msg2 : 'world'
}
const handler = {}
const proxy1 = new Proxy(target, handler)
console.log(proxy1.msg1) // hello
console.log(proxy1.msg2) // world
handler가 빈 객체일 경우, 별 달라지는게 없지만 함수를 추가한다면 어떨까
get() 처리기는 대상 객체의 속성 액세스를 가로챈다.
const target = {
msg1 : 'hello',
msg2 : 'world'
}
const handler2 = {
get(target, prop, receiver) {
return 'intercept!'
}
}
const proxy2 = new Proxy(target, handler2)
console.log(proxy2.msg1) // intercept!!
console.log(proxy2.msg2) // intercept!!