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
๋ณต์ฌ
