- ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋กํผํฐ ์ถ๊ฐ ๊ธ์ง๋ฅผ ์๋ฏธ
- ๋์ ์ถ๊ฐ์ Object.defineProperty๋ก ์ถ๊ฐ ๋ฐฉ๋ฒ์ด ๊ธ์ง๋๋ค.
๊ตฌ๋ถ | ๋ฉ์๋ | ํ๋กํผํฐ ์ถ๊ฐ | ํ๋กํผํฐ ์ญ์ | ํ๋กํผํฐ ๊ฐ ์ฝ๊ธฐ | ํ๋กํผํฐ ๊ฐ ์ฐ๊ธฐ | ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ ์ฌ์ ์ |
---|---|---|---|---|---|---|
๊ฐ์ฒด ํ์ฅ ๊ธ์ง | Object.preventExtensions | X | O | O | O | O |
๊ฐ์ฒด ๋ฐ๋ด | Object.preventExtensions | X | X | O | O | X |
๊ฐ์ฒด ๋๊ฒฐ | Object.preventExtensions | X | X | O | X | X |
const obj = { a: "default" };
Object.seal(obj);
obj.b = "add";
console.log(obj); // { a: 'default' }
obj.a = "seal";
console.log(obj); // { a: 'seal' }
delete obj.a;
console.log(obj); // { a: 'seal' }
Object.freeze(obj);
obj.b = "add";
console.log(obj); // { a: 'seal' }
obj.a = "freeze";
console.log(obj); // { a: 'seal' }
delete obj.a;
console.log(obj); // { a: 'seal' }
/* change */
Object.seal(obj); // { a: 'seal' }
obj.a = "change seal";
console.log(obj);
๐๐ป seal()์ ํ์ฅ์ด ๋ถ๊ฐํ๊ณ ์์ ์ ๊ฐ๋ฅํ๋ฉฐ, ์ญ์ ํ ์ ์์.
๐๐ป freeze()์ ํ์ฅ์ด ๋ถ๊ฐํ๊ณ ์์ ํ ์ ์์ผ๋ฉฐ, ์ญ์ ํ ์ ์์.
freeze -> seal -> preventExtensions ๋ ๋ถ๊ฐ๋ฅํ์ฌ freeze๋ก ๊ณ ์ ๋ฉ๋๋ค!!!
์ฐธ๊ณ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive