
โ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ์ ํ๋กํผํฐ ๋์คํฌ๋ฆฝํฐ ๊ฐ์ฒด
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ๋กํผํฐ๋ฅผ ์์ฑํ ๋ ํ๋กํผํฐ์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋ ์ ์ํ๋ค.
ํ๋กํผํฐ์ ์ํ๋ ํ๋กํผํฐ์ ๊ฐ(value), ๊ฐ์ ๊ฐฑ์ ๊ฐ๋ฅ ์ฌ๋ถ(writable), ์ด๊ฑฐ ๊ฐ๋ฅ ์ฌ๋ถ(enumerable), ์ฌ์ ์ ๊ฐ๋ฅ ์ฌ๋ถ(configurable)๋ฅผ ๋งํ๋ค.
ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๊ด๋ฆฌํ๋ ๋ด๋ถ ์ํ ๊ฐ(meta-property)์ธ ๋ด๋ถ ์ฌ๋กฏ [[Value]], [[Writable]], [[Enumerable]], [[Configurable]]์ด๋ค. ๋ฐ๋ผ์ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ์ ์ง์ ์ ๊ทผํ ์ ์์ง๋ง Object.getOwnPropertyDescriptor ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ ์ผ๋ก ํ์ธํ ์๋ ์๋ค.
const person = {
name: "Lee"
};
// ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ํ๋กํผํฐ ๋์คํฌ๋ฆฝํฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
console.log(Object.getOwnPropertyDescriptor(person, "name"));
// {value: "Lee", writable: true, enumerable: true, configurable: true}
โ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ์ ๊ทผ์ ํ๋กํผํฐ
ํ๋กํผํฐ๋ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ์ ๊ทผ์ ํ๋กํผํฐ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
-๋ฐ์ดํฐ ํ๋กํผํฐ(data-property)
ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์ผ๋ฐ์ ์ธ ํ๋กํผํฐ๋ค. ์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ชจ๋ ํ๋กํผํฐ๋ ๋ฐ์ดํฐ ํ๋กํผํฐ๋ค.
-์ ๊ทผ์ ํ๋กํผํฐ(accessor-property)
์์ฒด์ ์ผ๋ก๋ ๊ฐ์ ๊ฐ์ง ์๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ ๋ ํธ์ถ๋๋ ์ ๊ทผ์ ํจ์(accessor-function)๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ๋ค. (์ ๊ทผ์ ํจ์๋ getter / setter ํจ์๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค)
'๐ ๋ชจ๋ฅ๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 31์ฅ. RegExp(์ ๊ท ํํ์) (3) | 2025.08.27 |
|---|---|
| 23์ฅ. ์คํ ์ปจํ ์คํธ(LexicalEnvironment์ VariableEnvironment) (1) | 2025.05.20 |
| 19์ฅ. prototype๊ณผ __proto__์ ์ฐจ์ด? (0) | 2025.05.06 |
| 17์ฅ. ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ (0) | 2025.02.28 |