proxy를 사용하면 기존 이벤트를 가로채 다른 함수를 실행할 수 있다.
간단한 예를 보면, 다음과 같다.
const target = {
a: "a_word",
b: "b_word",
}
const handler = {
get(target, prop, receiver) {
switch(prop){
case 'a':
return "A";
case 'b':
return "B";
}
}
}
const proxy = new Proxy(target, handler);
console.log(proxy.a, proxy.b);
기존의 객체를 가로채어 다른 값을 return하게 만든다.
handler가 기존의 실행을 가로채어 실행되는 함수로, switch나 if문 등을 사용하여 특정 key값의 객체값만 다른 값으로 return하게 할 수 있다.
이와 같은 컨셉을 Reflect를 사용하여 다음과 같이 더 편하게 표현할 수도 있다.
const target = {
a: "a_word",
b: "b_word",
}
const handler = {
get(target, prop, receiver) {
if(prop === 'a') {
return "AAA";
}
return Reflect.get(...arguments);
}
}
const proxy = new Proxy(target, handler);
console.log(proxy.a, proxy.b);
Relect는 Proxy 생성을 간소화하는 내장객체이다.
🍋 Proxy의 가장 대표적인 쓰임새는 Observable 설계이다. 구독자를 설정(get)하고, 구독자에게 값의 변경(set)을 알릴 수 있다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Proxy - JavaScript | MDN
Proxy 객체를 사용하면 한 객체에 대한 기본 작업을 가로채고 재정의하는 프록시를 만들 수 있습니다.
developer.mozilla.org
https://ko.javascript.info/proxy
Proxy와 Reflect
ko.javascript.info
'JavaScript' 카테고리의 다른 글
선언식 함수와 화살표 함수에서의 this (0) | 2023.06.08 |
---|---|
Yarn berry 사용하기 (0) | 2023.05.13 |
HTML 화면 스크린샷 찍기 (html2canvas) (0) | 2023.05.04 |
Modal 화면 구현 (Modal 외부 클릭 시 Modal 꺼짐) (0) | 2023.05.02 |
이벤트 버블링(Event Bubbling) 및 이벤트 캡처링(Event Capture)에 대해서 (0) | 2023.04.26 |