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!!