๐16 - ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ
[[]]
๋ด๋ถ์ฌ๋กฏ๊ณผ ๋ด๋ถ ๋ฉ์๋
JS์์ง์ ๊ตฌํ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช
ํ๋ ECMA Script ์ฌ์์ ์์ฌ ํ๋กํผํฐ์ ์์ฌ ๋ฉ์๋
๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ๊ฑฐ๋ ํธ์ถํ ์ ์์ง๋ง ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ์ผ๋ถ ์ฌ๋ก๊ณผ ๋ฉ์๋
[[Prototype]]
๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ๋ ๋ด๋ถ์ฌ๋กฏ
proto๋ก ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ
const a = {}
a.[[Prototype]] // SyntaxError
a.__proto__ // Object.prototype
JS ์์ง์ ํ๋กํผํฐ ์์ฑ์ ํ๋กํผํฐ์ดํธ๋ฆฌ๋ทฐํธ(ํ๋กํผํฐ์์ํ)๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์
๋ฐ์ดํฐ ํ๋กํผํฐ
ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์ผ๋ฐ์ ์ธ ํ๋กํผํฐ
ex) [[Value]], [[Writable]]... ํ๋กํผํฐ ์์ฑ์ [[Value]]๊ฐ : ํ๋กํผํฐ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋จ
์ ๊ทผ์ ํ๋กํผํฐ
์ ๊ทผ์ ํจ์๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ(๋ค๋ฅธ ๋ฐ์ดํฐ์ ๊ฐ์ ์ฝ์๋ ํธ์ถ๋๋)
๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ณ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ ์ ๊ทผ์ ํจ์๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ
- ์์ฒด์ ์ผ๋ก ๊ฐ์ ๊ฐ์ง์ง ์์
getter / setter
==์ ๊ทผ์ ํจ์
์์ฒด์ ์ผ๋ก ๊ฐ์ ๊ฐ์ง์ง ์๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ ์ ๊ทผ์ ํจ์์ค ๋ํ์ ์ธ ํจ์๋ค
๊ฐ์ฒด ๋ณ๊ฒฝ ๋ฐฉ์ง
๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ด์ด์ ์ฌํ ๋น ์์ด ์ง์ ๋ณ๊ฒฝ ๊ฐ๋ฅ (ํ๋กํผํฐ ์ถ๊ฐ,์ญ์ ,๊ฐฑ์ ๊ฐ๋ฅ)
๋จ, ์๋์ ๋ฉ์๋๋ค์ ์์ ๋ณ๊ฒฝ ๋ฐฉ์ง๋ก ์ค์ฒฉ๋ ๊ฐ์ฒด๊น์ง ๋๊ฒฐํ ์๋ ์๋ค.
Object.seal : ๊ฐ์ฒด๋ฐ๋ด
Object.freeze : ๊ฐ์ฒด ๋๊ฒฐ
๐17 - ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ
๊ฐ์ฒด์ ์์ฑ๋ฐฉ์ 1) ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์ 2) ์์ฑ์ ํจ์ ๋ฐฉ์
1) ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์
์ง๊ด์ ์ด๊ณ ๊ฐํธํ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ด์ง๋ง, ๋์ผํ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํด์ผ ํ ๋ ๋ฒ๊ฑฐ๋กญ๋ค
2) ์์ฑ์ ํจ์ ๋ฐฉ์
new ์ฐ์ฌ๋ฅ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ํจ์ ( ๋นํธ์ธ ์์ฑ์ ํจ์ : Object,String,Number...)
ํ๋กํผํฐ ๊ตฌ์กฐ๊ฐ ๋์ผํ ๊ฐ์ฒด ์ฌ๋ฌ๊ฐ๋ฅผ ๋ง๋๋๋ฐ ํธ๋ฆฌํ๋ค
์์ฑ์ ํฉ์์ ์ธ์คํด์ค ์์ฑ ๊ณผ์
new ์ฐ์ฐ์์ ํจ๊ฒ ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด JS ์์ง์ ์๋ฌต์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํํ ๋ฐํํ๋ค.
๋ฐ์ธ๋ฉ
: ์๋ณ์์ ๊ฐ์ ์ฐ๊ฒฐํ๋ ๊ณผ์ (๋ณ์์ ์ธ : ์๋ณ์์ธ ๋ณ์์ด๋ฆ๊ณผ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๋ฅผ ๋ฐ์ธ๋ฉ ํ๋๊ฒ )
- ๋ฐํ์ ์ด์ ์ ์๋ฌต์ ์ผ๋ก ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ๊ทธ๊ฒ์ this์ ๋ฐ์ธ๋ฉ
- ์ธ์คํด์ค ์ด๊ธฐํ : ์ธ์คํด์ค์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ํ ์ ๋ฌ๋ฐ์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ด๊ธฐํ
- ์ธ์คํด์ค ๋ฐํ: return ์ด ๋ฐ๋ก ์์ผ๋ฉด ์ธ์คํด์ค๊ฐ ๋ฐ์ธ๋ฉ ๋ this ๋ฐํ
-> return ํ ์๋ ์์ง๋ง ์์ฑ์ํจ์์ ๊ธฐ๋ณธ ๋์์ ํผ์ํ๊ธฐ ๋๋ฌธ์ ์ง์
ํจ์ ๊ฐ์ฒด
๋ชจ๋ ํจ์๋ ํธ์ถํ ์ ์์ง๋ง ์์ฑ์ํจ์๋ก์ ํธ์ถํ ์ ์๋ค
ํจ์๊ฐ ์ด๋ ํ ๋น๋์ง๊ฐ ์๋๋ผ ํจ์์ ์๋ฐฉ์์ ๋ฐ๋ผ constructor,non-constructor์ ๊ตฌ๋ถํ๋ค.
constructorํจ์
[[Call]], [[Constructor]]
์ผ๋ฐ์ ์ธ ํจ์์ ์ : ํจ์ ์ ์ธ๋ฌธ(funciton foo(){}
, ํจ์ ํํ์var a = function foo(x){}
, ํด๋์ค
non-constructor ํจ์
[[Call]]
๋ฉ์๋ const obj ={x(){} }
, ํ์ดํ ํจ์cosnt a =()=>{}
ํจ์๋ฅผ ๊ทธ๋ฅ ์ ์ธํ๋ ๊ฒ๊ณผ new ๋ก ์์ฑํ๋ ๊ฒ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋? [โ์ง๋ฌธ]
ํจ์๋ฅผ new์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด ์์ฑ์ ํจ์๋ก ๋์ํ๊ฒ ๋๊ณ ํจ์ ๋ด๋ถ๋ฉ์๋ [[Constructor]]๊ฐ ํธ์ถ๋๋ค.
์์ฑ์ ํจ์์ this
: ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํด
์ผ๋ฐ ํจ์(๊ทธ๋ฅ ์ ์ธํ ํจ์)์ this
: ์ ์ญ๊ฐ์ฒด window๋ฅผ ๊ฐ๋ฆฌํด (๋ธ๋ผ์ฐ์ :window, nodejs: global)
๋ฐ๋ผ์ ์์ฑ์ ํจ์๋ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์๋กํด(ํ์ค์นผ์ผ์ด์ค) ์ผ๋ฐํจ์์ ๊ตฌ๋ถํ๋ค.
๋นํธ์ธ ์์ฑ์ ํจ์(Object, String,Number,Boolean,Function,Array, Data,RegExp,Promie)๋ new ์์ด ํธ์ถํด๋ ๋์ผํ๊ฒ ๋์ํ๋ค
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS Tam9์ํ] #7 ๋นํธ์ธ ๊ฐ์ฒด (0) | 2021.08.09 |
---|---|
[JS Tam9์ํ] #6 Prototype __proto__ [[Prototype]] (0) | 2021.08.08 |
[JS Tam9์ํ] #4 Primitive VS Object (Reference) (0) | 2021.07.18 |
[JS Tam9์ํ] #3 ๊ฐ์ฒด์ ํ๋กํผํฐ (0) | 2021.07.17 |
[JS Tam9์ํ] #2 FE ์ํ๊ด๋ฆฌ (0) | 2021.07.16 |
๋๊ธ