let proxy = new Proxy(target, handler)
target โ ๊ฐ์ธ๊ฒ ๋ ๊ฐ์ฒด๋ก, ํจ์๋ฅผ ํฌํจํ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
handler โ ๋์์ ๊ฐ๋ก์ฑ๋ ๋ฉ์๋์ธ 'ํธ๋ฉ(trap)'์ด ๋ด๊ธด ๊ฐ์ฒด๋ก, ์ฌ๊ธฐ์ ํ๋ฝ์๋ฅผ ์ค์ ํฉ๋๋ค(์์: get ํธ๋ฉ์ target์ ํ๋กํผํฐ๋ฅผ ์ฝ์ ๋, set ํธ๋ฉ์ target์ ํ๋กํผํฐ๋ฅผ ์ธ ๋ ํ์ฑํ๋จ).
proxy์ ์์
์ด ๊ฐํด์ง๊ณ , handler์ ์์
๊ณผ ์์ํ๋ ํธ๋ฉ์ด ์์ผ๋ฉด ํธ๋ฉ์ด ์คํ๋์ด ํ๋ฝ์๊ฐ ์ด ์์
์ ์ฒ๋ฆฌํ ๊ธฐํ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ํธ๋ฉ์ด ์์ผ๋ฉด target์ ์์
์ด ์ง์ ์ํ๋ฉ๋๋ค.
const myObj = { name: 'mcm', changedValue: 0}
const proxy = new Proxy(myObj, {
get: function(target, property, receiver) { // getํธ๋ฉ
console.log('get value')
return target[property]
},
set: function(target, property, value) { // setํธ๋ฉ
console.log('set value')
++target['changedValue'];
target[property] = value
}
})
proxy.name = 'hihi' // set value
console.log(proxy.name) // get value , hihi