get でそのままプロパティを返すだけだと特に問題ない
const frozen = Object.freeze({x: 1})
const proxy = new Proxy(frozen, {
get(target, name) {
return target[name]
}
})
console.log(proxy.x)
// 1
同じ値を返せばリテラルでも
const frozen = Object.freeze({x: 1})
const proxy = new Proxy(frozen, {
get(target, name) {
return 1
}
})
console.log(proxy.x)
// 1
異なる値を返そうとすると
const frozen = Object.freeze({x: 1})
const proxy = new Proxy(frozen, {
get(target, name) {
return 2
}
})
console.log(proxy.x)
// Uncaught TypeError: 'get' on proxy: property 'x' is a read-only and non-configurable data property on the proxy target but the proxy did not return its actual value (expected '1' but got '2')
// at <anonymous>:9:19
Proxy 済みの別オブジェクトなのに元の freeze を引き継がせようとしてるみたい
そんな機能いらないけど
でも Proxy にわたすオブジェクトをダミーにすればいいので回避は簡単
本来の取得値に 1 足したものを返したい場合
const frozen = Object.freeze({x: 1})
const proxy = new Proxy(frozen, {
get(target, name) {
return target[name] + 1
}
})
とする代わりに
const frozen = Object.freeze({x: 1})
const proxy = new Proxy({}, {
get(target, name) {
return frozen[name] + 1
}
})
console.log(proxy.x)
// 2
とすればエラーにはならない