์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค.
์ค๋์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํผํฐ ํ๋๊ทธ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ดํธ์์ ๊ณต๋ถํ๋ ๊ฒ์ ๋ณต์ตํ๋ ์ฐจ์์์ ์ ๊ฐ ์ดํดํ ๋ฐฉ์์ผ๋ก ์ ์ด๋ณด๊ฒ ์ต๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~
Property Flag๋?
ํ๋กํผํฐ๋ ๊ฐ ๋ฟ๋ง ์๋๋ผ ํ๋๊ทธ๋ผ ๋ถ๋ฆฌ๋ ํน๋ณํ ์์ฑ 3๊ฐ์ง๋ฅผ ๊ฐ์ง๋ค.
1. writable
ํด๋น ํ๋กํผํฐ๋ฅผ ์์ ํ ์ ์๊ฒ ์ค์ ํ๋ ํ๋๊ทธ
2. enumrable
ํด๋น ํ๋กํผํฐ๋ฅผ ๋์ดํ ์ ์๊ฒ ์ค์ ํ๋ ํ๋๊ทธ
3. configurable
ํด๋น ํ๋กํผํฐ๋ฅผ ์ญ์ , ํ๋๊ทธ ์์ ์ด ๊ฐ๋ฅํ๊ฒ ์ค์ ํ๋ ํ๋๊ทธ
Property Flag ํ์ธํ๋ ๋ฐฉ๋ฒ
Object.getOwnPropertyDescriptor(๊ฐ์ฒด,ํ๋กํผํฐ๋ช )์ผ๋ก ํ์ธํ๊ณ ,
์ด๊ธฐ์ ๋ชจ๋ true๋ก ์ค์ ๋์ด ์๋ค.
let user = {
nickName:"foma",
age:27
}
let descriptor = Object.getOwnPropertyDescriptor(user,'nickName')
console.log(descriptor)//{ value: 'foma', writable: true, enumerable: true, configurable: true }
Writable
์ ์ ์ nickName์ writable ํ๋กํผํฐ ํ๋๊ทธ๋ฅผ flag๋ฅผ false๋ก ์ค์ ํ๊ณ
Object.defineProperty(user,'nickName',{
writable:false
})
๋ค์ ํ๋ฒ ํ๋กํผํฐ ํ๋๊ทธ๋ฅผ ํ์ธํ๋ฉด writable๋ง false๋ก ๋์ด์๋ค.
print(Object.getOwnPropertyDescriptor(user,'nickName')) //{ value: 'foma', writable: false, enumerable: true, configurable: true }
๋ง์ฝ ์์ ํ๋ ค๊ณ ํ๋ฉด ์๊ฒฉ๋ชจ๋์ผ ๋ error๊ฐ ๋๊ณ ์๋๋ฉด ๊ทธ๋ฅ ๋ฌด์๋๋ค.
user.nickName = "Foma" //error
Enumerable
user์ sayHi ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ๋ค ํ๋กํผํฐ๋ฅผ ์ํํ์ฌ ์ถ๋ ฅํ๋ฉด ์๋์ ๊ฐ์ด ๋ฉ์๋ ํฌํจํด์ ๋ชจ๋ ์ถ๋ ฅ๋๋ค.
user.sayHi = function (){
print("์๋
")
}
for (let key in user) {
print(key)
}
/*
nickName
age
sayHi
*/
์ฌ๊ธฐ์ ๋ง์ฝ nickName์ enumerable ํ๋กํผํฐ ํ๋๊ทธ๋ฅผ false๋ก ์ค์ ํ๊ณ ๋ค์ ํ๋ฒ ์ํํ๋ฉด
nickName์ด ์ ์ธ๋ ์ฑ ์ถ๋ ฅ๋๋ค.
Object.defineProperty(user,'nickName',{
enumerable:false
})
for (let key in user) {
print(key)
}
/*
age
sayHi
*/
Configurable
nickName์ configurable ํ๋กํผํฐ ํ๋๊ทธ๋ฅผ false๋ก ์ค์ ํ๊ณ
Object.defineProperty(user,'nickName',{
configurable:false
})
ํด๋น ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
delete user.nickName //์๋ฌ
๋ํ ํด๋น ํ๋กํผํฐ์ ๋ค๋ฅธ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
Object.defineProperty(user,'nickName',{
writable:true
}) //์๋ฌ
๋ง์ฝ writable๊ณผ configurable์ด ๋ชจ๋ false๋ผ๋ฉด ์ญ์ ๋ ์์ ์ด ์์ํ ๋ถ๊ฐ๋ฅํ๋ค.
์ฌ๋ฌ ํ๋กํผํฐ์ ํ๋๊ทธ ๋ณ๊ฒฝํ๊ธฐ
Object.defineProperties๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ๋กํผํฐ์ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
Object.defineProperties(user,{
name:{value:"foma",writable:true,enumerable:false,configurable:true},
age:{value:2,writable:true,enumerable:false,configurable:true}
})
๊ฐ์ฒด ์์ ์ ๋ง์์ฃผ๋ ๋ค์ํ ๋ฉ์๋
ํ๋กํผํฐ ํ๋๊ทธ ์ธ์๋ ๊ฐ์ฒด ์์ ์ ๋ง์์ฃผ๋ ๋ค์ํ ๋ฉ์๋๋ค์ด ์๋ค.
Object.preventExtensions(user) //์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐ ๋ถ๊ฐ
Object.seal(user) //์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐ๋ ๊ธฐ์กด ํ๋กํผํฐ ์ญ์ ๋ฅผ ๋ง์์ค
Object.freeze(user) //์๋ก์ด ํ๋กํผํฐ ์ถ๊ฐ,๊ธฐ์กด ํ๋กํผํฐ ์ญ์ ,์์ ์ ๋ง์์ค
Object.isExtensible(user) //์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋๊ฒ ๋ถ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ค
Object.isSealed(user) //ํ๋กํผํฐ๊ฐ ์ถ๊ฐ,์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ ๋ชจ๋ ํ๋กํผํฐ๊ฐ configurable:false์ธ์ง ์๋ ค์ค
Object.isFrozen(user) //ํ๋กํผํฐ ์ถ๊ฐ,์ญ์ ,๋ณ๊ฒฝ์ด ๋ถ๊ฐ์ผํ๊ณ ๋ชจ๋ ํ๋กํผํฐ๊ฐ configurable:false,writable:false์ธ์ง ์๋ ค์ค
Reference
'๐ Language > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ํด๋์ค(Class) ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ์์ (0) | 2022.02.12 |
---|---|
[JS] ํ๋กํ ํ์ (Prototype) ๋ค๋ค๋ณด๊ธฐ (0) | 2022.02.12 |
[JS] JSON๊ณผ ๊ฐ์ฒด ๋ค๋ฃจ๊ธฐ (0) | 2022.02.05 |
[JS] ๊ตฌ์กฐ๋ถํด(Destructuring) (feat. ์ฝ๊ฒ ๋ณ์ ๋ง๋ค๊ธฐ) (0) | 2022.02.05 |
[JS] iOS ๊ฐ๋ฐ์๊ฐ ์ดํดํ๋ JavaScript ๊ธฐ์ด๋ฌธ๋ฒ (feat. Swift) (0) | 2022.02.05 |
๋๊ธ