基本的な認識としましては、オブジェクトの動作を邪悪にするやつです。
const handler = {
get(obj, prop) {
return prop in obj ? obj[prop] : 100
},
set(obj, prop, value) {
obj[prop] = value * 2
}
}
const p = new Proxy({}, handler)
p.a = 1
p.b = 200
console.log(p.a) // => 2
console.log(p.b) // => 400
console.log(p.x) // => 100
new Proxy(ターゲット, ハンドラー)
という感じで定義します。
上記の例では、代入時に数値を2倍、存在しないプロパティにアクセスすると100が返ります。
気持ち
基本的にショートハンドを提供する装置としての役割が大きいように見えます。
immer
などはこのProxyを使い、ミュータブルな操作でイミュータブルな処理が書けるようになっています。
何か面白い使い方ができそうですね。