Search

javascript - property

subtitle
Tags
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
Created
2025/06/02
2 more properties

property attribute

๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ

๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋กœ์ง์ด๋ฏ€๋กœ ์›์น™์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํ•˜์ง€๋งŒ, [[Prototype]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์˜ ๊ฒฝ์šฐ, __proto__ ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

property descryptor

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ”„๋กœํผํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ž๋™ ์ •์˜ํ•œ๋‹ค. ํ”„๋กœํผํ‹ฐ์˜ ์ƒํƒœ๋ž€ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’(value), ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(writable), ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(enumerable), ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(configurable)๋ฅผ ๋งํ•œ๋‹ค.

ํ”„๋กœํผํ‹ฐ ์ •์˜

Object.defineProperty ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ์ž๋กœ ๊ฐ์ฒด์˜ ์ฐธ์กฐ์™€ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ํ‚ค์ธ ๋ฌธ์ž์—ด, ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
const person = {} Object.defineProperty(person, 'firstName', { value: 'Hyunji', writable: true, enumerable: true, configurable: true }) // { "value": "Hyunji", "writable": true, "enumerable": true, "configurable": true } Object.getOwnPropertyDescriptor(person, 'firstName')
JavaScript
๋ณต์‚ฌ
Object.defineProperties ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ์ฒด ๋ณ€๊ฒฝ ๋ฐฉ์ง€

๊ฐ์ฒด ํ™•์žฅ ๊ธˆ์ง€

Object.preventExtensions ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์˜ ํ™•์žฅ์„ ๊ธˆ์ง€ํ•œ๋‹ค. ํ™•์žฅ์ด ๊ธˆ์ง€๋œ ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€๊ฐ€ ๊ธˆ์ง€๋œ๋‹ค. ํ™•์žฅ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” Object.isExtensible ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ์ฒด ๋ฐ€๋ด‰

Object.seal. ๊ฐ์ฒด ๋ฐ€๋ด‰์ด๋ž€ ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ์™€ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์žฌ์ •์˜ ๊ธˆ์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋ฐ€๋ด‰๋œ ๊ฐ์ฒด๋Š” ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ€๋ด‰๋œ ๊ฐ์ฒด์ธ์ง€ ์—ฌ๋ถ€๋Š” Object.isSealed ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ์ฒด ๋™๊ฒฐ

Object.freeze๋กœ ๋™๊ฒฐ๋œ ๊ฐ์ฒด๋Š” ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋™๊ฒฐ๋œ ๊ฐ์ฒด์ธ์ง€ ์—ฌ๋ถ€๋Š” Object.isFrozen ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด

์ง€๊ธˆ๊นŒ์ง€ ๋ณธ ๋ณ€๊ฒฝ ๋ฐฉ์ง€ ๋ฉ”์„œ๋“œ๋“ค์€ ์–•์€ ๋ณ€๊ฒฝ ๋ฐฉ์ง€์ด๋ฏ€๋กœ ์ค‘์ฒฉ ๊ฐ์ฒด๊นŒ์ง€๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Object.freeze๋กœ ๊ฐ์ฒด๋ฅผ ๋™๊ฒฐํ•ด๋„ ์ค‘์ฒฉ ๊ฐ์ฒด๊นŒ์ง€๋Š” ๋™๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค.

์ƒ์„ฑ์ž ํ•จ์ˆ˜

new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋˜๋ฉด ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ new.target์€ ํ•จ์ˆ˜ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. new ์—ฐ์‚ฐ์ž ์—†์ด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ new.target์€ undefined์ด๋‹ค.
function Circle(radius) { if (!new.target) { return new Circle(radius) } }
JavaScript
๋ณต์‚ฌ
ํ•˜์ง€๋งŒ new.target์€ ES6์—์„œ ๋„์ž…๋œ ์ตœ์‹  ๋ฌธ๋ฒ•์œผ๋กœ IE์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. new.target์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์Šค์ฝ”ํ”„ ์„ธ์ดํ”„ ์ƒ์„ฑ์ž ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ full support๊ฐ€ ๋˜๋‹ˆ, ๋งŒ์•ฝ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์˜คํ”ˆ์†Œ์Šค์—์„œ ๋ฐœ๊ฒฌํ•œ๋‹ค๋ฉด IE๋ฅผ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ์งœ์—ฌ์ ธ์žˆ๋‹ค๋Š” ๊ฑธ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋‹ค.
function Circle(radius) { if (!(this instanceof Circle)) { return new Circle(radius) } }
JavaScript
๋ณต์‚ฌ