๐ 19.8 ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ํ๋กํผํฐ ์๋์
ํ๋กํ ํ์ ํ๋กํผํฐ์ ๊ฐ์ ์ด๋ฆ์ ํ๋กํผํฐ๋ฅผ ์ธ์คํด์ค์ ์ถ๊ฐํ๋ฉด
-> ๋ฎ์ด์ฐ๋ ๊ฒ์ด ์๋๋ผ ์ธ์คํด์ค ํ๋กํผํฐ๋ก ์ถ๊ฐํ๋ค.
์ธ์คํด์ค ๋ฉ์๋๊ฐ ํ๋กํ ํ์ ํ๋กํผํฐ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๊ณ ,
ํ๋กํ ํ์ ๋ฉ์๋๋ ๊ฐ๋ ค์ง๋ค.
=> ์ด๋ ๊ฒ ์์ ๊ด๊ณ์ ์ํด ํ๋กํผํฐ๊ฐ ๊ฐ๋ ค์ง๋ ํ์ :: ํ๋กํผํฐ ์๋์
๐ ์ค๋ฒ๋ผ์ด๋ฉ
: ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํ๋ ค ์ฌ์ฉํ๋ ๋ฐฉ์
๐ ์ค๋ฒ๋ก๋ฉ
: ํจ์์ ์ด๋ฆ์ ๋์ผํ์ง๋ง, ๋งค๊ฐ๋ณ์์ ํ์ or ๊ฐ์๊ฐ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ ,
๋งค๊ฐ๋ณ์์ ์ํด ๋ฉ์๋๋ฅผ ๊ตฌ๋ณํ์ฌ ํธ์ถํ๋ ๋ฐฉ์.
JS ๋ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ์ง ์์ง๋ง arguments ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์๋ ์๋ค.
ํ๋กํ ํ์ ์ ๋ฉ์๋๋ฅผ ์ญ์ ํ๋ ค๊ณ ์๋ -> ์ธ์คํด์ค ๋ฉ์๋๊ฐ ์ญ์ ๋จ.
:: ํ์ ๊ฐ์ฒด๋ฅผ ํตํด ํ๋กํ ํ์ ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝ, ์ญ์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํจ.
์ฆ, get ์ก์ธ์ค๋ ํ์ฉ๋๋ set ์ก์ธ์ค๋ ํ์ฉ ์๋จ.
ํ๋กํ ํ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝ ๋๋ ์ญ์ ํ๋ ค๋ฉด -> ํ๋กํ ํ์ ์ ์ง์ ์ ๊ทผํด์ผํจ.
๐ 19.9 ํ๋กํ ํ์ ์ ๊ต์ฒด
ํ๋กํ ํ์ ์ ์์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํ ์ ์์. = ๋ถ๋ชจ ๊ฐ์ฒด์ธ ํ๋กํ ํ์ ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํจ.
=> ์ด๋ฐ ํน์ง์ ํ์ฉํด ๊ฐ์ฒด๊ฐ์ ์์ ๊ด๊ณ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์.
19.9.1 ์์ฑ์ ํจ์์ ์ํ ํ๋กํ ํ์ ์ ๊ต์ฒด
ํ๋กํ ํ์ ์ ๊ต์ฒดํ๋ฉด -> construnctor ํ๋กํผํฐ์ ์์ฑ์ ํจ์ ๊ฐ์ ์ฐ๊ฒฐ์ด ํ๊ดด๋๋ค.
constructor ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํด์ ๋์ด๋ฆด ์๋ ์๋ค.
19.9.2 ์ธ์คํด์ค์ ์ํ ํ๋กํ ํ์ ์ ๊ต์ฒด
์ธ์คํด์ค์ __proto__ ์ ๊ทผ์ ํ๋กํผํฐ ๋๋ Object.setPrototypeOf ๋ฉ์๋๋ฅผ ํตํด ํ๋กํ ํ์ ์ ๊ต์ฒดํ ์ ์๋ค.
์์ฑ์ ํจ์์ prototype ํ๋กํผํฐ์ ๋ค๋ฅธ ์์์ ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉ ํ๊ฐ๋ ๊ฒ์ ๋ฏธ๋์ ์์ฑํ ์ธ์คํด์ค์ ํ๋กํ ํ์ ์ ๊ต์ฒดํ๋ ๊ฒ์.
๐ ์์ฑ์ ํจ์์ ์ํ ํ๋กํ ํ์ ๊ต์ฒด VS ์ธ์คํด์ค์ ์ํ ํ๋กํ ํ์ ๊ต์ฒด
์์ฑ์ ํจ์์ prototype ํ๋กํผํฐ๊ฐ ๊ต์ฒด๋ ํ๋กํ ํ์ ์ ๊ฐ๋ฆฌํด โญ : ์์ฑ์ ํจ์
์์ฑ์ ํจ์์ prototype ํ๋กํผํฐ๊ฐ ๊ต์ฒด๋ ํ๋กํ ํ์ ์ ๊ฐ๋ฆฌํค์ง โ : ์ธ์คํด์ค
ํ๋กํ ํ์ ๊ต์ฒด๋ฅผ ํตํด ์์ ๊ด๊ณ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋๊ฑด ๊ฝค๋ ๋ฒ๊ฑฐ๋ก์ฐ๋, ์ง์ ๊ต์ฒดํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
๐ 19.10 instanceof ์ฐ์ฐ์
๊ฐ์ฒด instanceof ์์ฑ์ํจ์
์์ฑ์ ํจ์์ prototype ์ ๋ฐ์ธ๋ฉ ๋ ๊ฐ์ฒด๊ฐ, ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ ์์ ์กด์ฌํ๋ฉด -> โญ true
์์ฑ์ ํจ์์ prototype ์ ๋ฐ์ธ๋ฉ ๋ ๊ฐ์ฒด๊ฐ, ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ ์์ ์์ผ๋ฉด -> โ false
(๊ฑ ๊ฐ์ฒด๋ ์์ฑ์ ํจ์์ instance ์ธ๊ฐ ๋ผ๋ ์ฐ์ฐ์ ์๋๊ฐ?)
์ ์ธ์คํด์ค ๋ง์๋ false ๋์ฌ ์ ์์.
์ฐ๊ฒฐ ํ๊ดด๋์ ์๋ ์์.
๐ 19.11 ์ง์ ์์
19.11.1 Object.create ์ ์ํ ์ง์ ์์
๋ช ์์ ์ผ๋ก ํ๋กํ ํ์ ์ ์ง์ ํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํจ.
Object.create(์์ฑํ ๊ฐ์ฒด์ ํ๋กํ ํ์
์ผ๋ก ์ง์ ํ ๊ฐ์ฒด, Option ์์ฑํ ๊ฐ์ฒด์ ํ๋กํผํฐ ํค์ ํ๋กํฐํผ ๋์คํธ๋ฆฝํฐ ๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด)
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ์ง์ ์ ์ผ๋ก ์์์ ๊ตฌํํ๋ ๊ฒ.
์ฅ์
- new ์ฐ์ฐ์๊ฐ ์์ด๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- ํ๋กํ ํ์ ์ ์ง์ ํ๋ฉด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ํด ์์ฑ๋ ๊ฐ์ฒด๋ ์์๋ฐ์ ์ ์๋ค.
19.11.2 ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ด๋ถ์์ __proto__์ ์ํ ์ง์ ์์
create ๋ฐฉ๋ฒ์ ์ฅ์ ์ด ์์ง๋ง, ๋๋ฒ์ฌ ์ธ์๋ก ํ๋กํผํฐ๋ฅผ ์ ์ํ๋๊ฒ ๋ฒ๊ฑฐ์ต๋ค.
ES6 ์์๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ด๋ถ์์ __proto__ ์ ๊ทผ์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์์์ ๊ตฌํํ ์ ์๋ค.
const myProto = {x: 10}
const obj ={
y: 20,
__proto__ : myProto
}
๐ 19.12 ์ ์ ํ๋กํผํฐ/๋ฉ์๋
์ ์ ํ๋กํผํฐ/๋ฉ์๋ : ์์ฑ์ ํจ์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ์ฐธ์กฐ/ํธ์ถํ ์ ์๋ ํ๋กํผํฐ/๋ฉ์๋.
-> ์์ฑ์ ํจ์๊ฐ ์์ฑํ ์ธ์คํด์ค๋ก ์ฐธ์กฐ/ํธ์ถํ ์ ์๋ค.
.strictProp
.stricMethod
Object.prototype.~ : ๋ชจ๋ ์ฒด์ธ์ ์ข
์ ์ ๋ฉ์๋์ด๋ฏ๋ก ๋ชจ๋ ๊ฐ์ฒด๊ฐ ํธ์ถ ๊ฐ๋ฅ
Object.~ : ์ธ์คํด์ค๊ฐ ํธ์ถํ ์ ์์
๐ 19.13 ํ๋กํผํฐ ์กด์ฌ ํ์ธ
19.13.1 in ์ฐ์ฐ์
๊ฐ์ฒด ๋ด ํน์ ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธ
key in object
19.13.2 Object.prototype.hasOwnProperty ๋ฉ์๋
๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋์ง ํ์ธํ ์ ์์.
๐ 19.14 ํ๋กํผํฐ ์ด๊ฑฐ
19.14.1 for...in ๋ฌธ
๊ฐ์ฒด์ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ์ํํ๋ฉฐ ์ด๊ฑฐ
const person = {
name: "Lee",
address: "Seoul",
}
for (const key in person) {
console.log(key, person[key])
}
//name Lee
//address Seoul
=> ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ ์์ ์กด์ฌํ๋ ๋ชจ๋ ํ๋กํ ํ์ ์ ํ๋กํผํฐ ์ค์์
ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ [[Enumerable]] ์ด true ์ธ ํ๋กํผํฐ๋ฅผ ์ํํ๋ฉฐ ์ด๊ฑฐํ๋ค.
(ํค๊ฐ ์ฌ๋ฒ์ธ ํ๋กํผํฐ๋ ์ด๊ฑฐํ์ง ์์)
์์๋ฅผ ๋ณด์ฅํ์ง ์์ง๋ง, ๋๋ถ๋ถ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์์ ๋ณด์ฅ, ์ซ์์ ๋ํด์ ์ ๋ ฌ
๋ฐฐ์ด์ for...of ์ฌ์ฉํ๊ธฐ.
19.14.2 Object.keys/values/entries
๊ฐ์ฒด ์์ ์ ๊ณ ์ ํ๋กํผํฐ๋ง ์ด๊ฑฐํ๊ธฐ ์ํด์ for...in ๋ณด๋จ Object.keys/values/entries ์ฌ์ฉ ๊ถ์ฅ.
keys : ๊ฐ์ง ํค๋ค์ ์ด๊ฑฐ-> ๋ฐฐ์ด๋ก ๋ฐํ
values : ๊ฐ์ง ๊ฐ๋ค์ ์ด๊ฑฐ-> ๋ฐฐ์ด๋ก ๋ฐํ
entries : ๊ฐ์ง ํค,๊ฐ ๋ค์ ์์ผ๋ก ์ด๊ฑฐ-> ๋ฐฐ์ด๋ก ๋ฐํ
ํ๋กํผํฐ ๋๋ฌด ๋ณต์กํ๊ณ ์ด๋ ต๋ค.
์ด๋์ ์ฌ์ฉํ๋์ง๋ ์๋ฌธ์ธ๋ฐ, ์ด๊ฑด ๊ฐ์๋ก ํ๋ฒ ๋ ๋ฃ๊ณ
๊ณ์ ์ต์ํด์ง๋ ์ ๋ฐ์ ์์ ๋ฏ ํ๋ค.
'๋ ์ ๋ชฉ๋ก > ๋ชจ๋ฅ๋ค Modern JS Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋ฅ๋ค] 21์ฅ ๋นํธ์ธ ๊ฐ์ฒด (0) | 2023.05.14 |
---|---|
[๋ชจ๋ฅ๋ค] 20์ฅ Strict Mode (0) | 2023.05.13 |
[๋ชจ๋ฅ๋ค] ๋ฒ์ธ ) ์ฐ๋ฆฌ๋ ์ ํ๋กํ ํ์ ์ ๋ํด์ ์์์ผํ ๊น? (0) | 2023.05.10 |
[๋ชจ๋ฅ๋ค] 18์ฅ ํจ์์ ์ผ๊ธ ๊ฐ์ฒด (0) | 2023.05.10 |
[๋ชจ๋ฅ๋ค] 17์ฅ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ (0) | 2023.05.09 |