handler.set()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itโs been available across browsers since โจ2016๋ 9์โฉ.
handler.set()
๋ฉ์๋๋ ์์ฑ ๊ฐ์ ์ค์ ์ ์ํ ํธ๋ฉ์
๋๋ค.
์๋ํด ๋ณด๊ธฐ
const monster1 = { eyeCount: 4 };
const handler1 = {
set(obj, prop, value) {
if (prop === "eyeCount" && value % 2 !== 0) {
console.log("Monsters must have an even number of eyes");
} else {
return Reflect.set(...arguments);
}
},
};
const proxy1 = new Proxy(monster1, handler1);
proxy1.eyeCount = 1;
// Expected output: "Monsters must have an even number of eyes"
console.log(proxy1.eyeCount);
// Expected output: 4
proxy1.eyeCount = 2;
console.log(proxy1.eyeCount);
// Expected output: 2
๊ตฌ๋ฌธ
new Proxy(target, {
set(target, property, value, receiver) {},
});
๋งค๊ฐ ๋ณ์
๋ค์ ๋งค๊ฐ๋ณ์๋ set()
๋ฉ์๋์ ์ ๋ฌ๋ฉ๋๋ค. this
๋ ์ฒ๋ฆฌ๊ธฐ์ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
target
-
๋์ ๊ฐ์ฒด
property
-
์ค์ ํ ์์ฑ์ ์ด๋ฆ ๋๋
Symbol
value
-
์ค์ ํ ์์ฑ์ ์ ๊ฐ
receiver
-
ํ ๋น์ด ์ง์๋ ์๋ ๊ฐ์ฒด์ ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ ์์ฒด์ ๋๋ค. ๊ทธ๋ฌ๋
set()
์ฒ๋ฆฌ๊ธฐ๋ ํ๋กํ ํ์ ์ฒด์ธ์ด๋ ๋ค์ํ ๋ค๋ฅธ ๋ฐฉ๋ฒ ๋ฑ์ ํตํด ๊ฐ์ ์ ์ผ๋ก ํธ์ถํ ์๋ ์์ต๋๋ค.์๋ฅผ ๋ค์ด, ์คํฌ๋ฆฝํธ๊ฐ
obj.name = "jen"
์ ์ํํ๋๋ฐ,obj
๋ ํ๋ก์๊ฐ ์๋๋ฉด์ ์์ฑ.name
์ด ์๊ณ , ํ๋กํ ํ์ ์ฒด์ธ์๋ ํ๋ก์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ์ด๋ ํด๋น ํ๋ก์์set()
์ฒ๋ฆฌ๊ธฐ๊ฐ ํธ์ถ๋๊ณ ๋์obj
๊ฐ ์์ ์๋ก ์ ๋ฌ๋ฉ๋๋ค.
๋ฐํ ๊ฐ
set()
๋ฉ์๋๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐํํฉ๋๋ค.
- ํ ๋น์ด ์ฑ๊ณตํ์ผ๋ฉด
true
๋ฅผ ๋ฐํํฉ๋๋ค. - ์๊ฒฉ ๋ชจ๋์์
set()
๋ฉ์๋๊ฐfalse
๋ฅผ ๋ฐํํ๋ฉดTypeError
์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ค๋ช
handler.set()
๋ฉ์๋๋ ์์ฑ ๊ฐ์ ์ค์ ์ ์ํ ํธ๋ฉ์
๋๋ค.
๊ฐ๋ก์ฑ๊ธฐ
์ด ํธ๋ฉ์ ๋ค์ ์์ ์ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
- ์์ฑ ํ ๋น:
proxy[foo] = bar
์proxy.foo = bar
- ์์๋ ์์ฑ ํ ๋น:
Object.create(proxy)[foo] = bar
Reflect.set()
๋ถ๋ณ ์กฐ๊ฑด
๋ค์ ๋ถ๋ณ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด ํ๋ก์์์ TypeError
๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๋์ ๊ฐ์ฒด ์์ฑ์ด ์ฐ๊ธฐ ๋ฐ ๊ตฌ์ฑํ ์ ์๋ ๋ฐ์ดํฐ ์์ฑ์ธ ๊ฒฝ์ฐ, ์์ฑ ๊ฐ์ ๋์ ๊ฐ์ฒด ์์ฑ์ ๊ฐ๊ณผ ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ๋์ ๊ฐ์ฒด ์์ฑ์
[[Set]]
์์ฑ์ดundefined
์ธ ๊ตฌ์ฑ ๋ถ๊ฐ๋ฅํ ์ ๊ทผ์ ์์ฑ์ธ ๊ฒฝ์ฐ, ์์ฑ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. - ์๊ฒฉ ๋ชจ๋์์
set()
์ฒ๋ฆฌ๊ธฐ๊ฐfalse
๋ฅผ ๋ฐํํ๋ฉดTypeError
์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์
์์ฑ ๊ฐ ์ค์ ํธ๋ฉ
๋ค์ ์ฝ๋๋ ์์ฑ ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ ํธ๋ฉํฉ๋๋ค.
const p = new Proxy(
{},
{
set(target, prop, value, receiver) {
target[prop] = value;
console.log(`property set: ${prop} = ${value}`);
return true;
},
},
);
console.log("a" in p); // false
p.a = 10; // "property set: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
๋ช ์ธ์
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver |
๋ธ๋ผ์ฐ์ ํธํ์ฑ
Loadingโฆ