๐ ๋จผ์ ์๋์ ๊ทธ๋ฆผ์ ์ดํดํ์
๋ฐฐ์ด ๋ฆฌํฐ๋ด์ Array ์์ฑ์ ํจ์์ Array.prototype
๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Array.prototype
์๋ ๋ฐฐ์ด๋ฉ์๋๊ฐ ๋ชจ๋ ๋ด๊ฒจ์๋ค.
์ฆ, Array.prototype
๋ ๊ฐ์ฒด์ด๋ค.
๊ทธ๋ฆฌ๊ณ __proto__
๊ฐ ์๋ต ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด instance๊ฐ ๋ง์น ์์ ์ ๋ฉ์๋์ธ๊ฒ์ฒ๋ผ ํธ์ถํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ, prototype
๊ฐ ๊ฐ์ฒด๋ผ๋ ๋ง์
๊ณง, Object ์์ฑ์ ํจ์์ new ์ฐ์ฐ์๋ก ์์ฑ๋ instance๋ผ๋ ๋ง์ด ๋๋ค.
๋ฐ๋ผ์ Object์ prototype๋ฅผ ์์๋ฐ๊ฒ ๋๋ค.
์ด์ ๋ฐฐ์ด์ Object์ prototype
์ ์๋ ๋ฉ์๋ ์ญ์ ๋ง์น ์์ ์ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
์ด์ฒ๋ผ __proto__
๋ผ๋ ๋นจ๊ฐ์ ์ ์ ๋ฐ๋ผ์ ์ฐ๊ฒฐ๋ ๊ฒ์ prototype chaining์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
prototype
๋ ๋ชจ๋ ๊ฐ์ฒด์ด๋ฏ๋ก ๋ชจ๋ ๋ฐ์ดํฐ ํ์
์ ํ๊ฒฐ๊ฐ์ด ์ด์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅธ๋ค.
๋ฌธ์์ด์ ๊ฒฝ์ฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋, ์๋์ผ๋ก String์ instance๋ก ๋ณํ๋๋ค.
๊ธฐํ ๋ฐ์ดํฐ ํ์
๋ ๋ชจ๋ ์ด์ ๊ฐ์ ์์ฑ์ ํจ์๊ฐ ์กด์ฌํ๊ณ , ๊ฐ ์์ฑ์ ํจ์์ prototype
์๋ ๊ฐ ๋ฐ์ดํฐ ํ์
์๋ง ํด๋นํ๋ ๋ฉ์๋๋ค์ด ์ ์๋์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋ฐ์ดํฐ ํ์
์ ๋ํด์ ์์ฑ์ ํจ์์ prototype
์ธ __proto__
๋ก ์ฐ๊ฒฐ๋ Object.prototype
์๋
์๋ฐ์คํฌ๋ฆฝํธ ์ ์ฒด๋ฅผ ํต๊ดํ๋ ๊ณตํต๋ ๋ฉ์๋๋ค์ด ์ ์ ๋์ด ์๋ค.
Object.prototype
์ ์ ์๋ ๋ฉ์๋๋ค์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์
์ด prototype chaining์ ํตํด ์ ๊ทผํ ์ ์๋ค
๐ ๊ทธ๋ฌ๋ ์ด๋ฌํ ๊ฒฝ์ฐ ๊ฐ์ฒด์
prototype
์๋ ํด๋น ๊ฐ์ฒด์๋ง ์ ์ฉ๋ ๋ฉ์๋๋ฅผ ์ ์ํด๋ ์ ์๋ค.
๊ฐ์ฒด์prototype
์ ์๋ ๋ฉ์๋๋ค์ ๋ชจ๋ ๋ฐ์ดํฐํ์ ์ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค๋ฅธ ๋ฐ์ดํฐ ํ์
๋ค์ฒ๋ผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ถ์๋ฐ, ๊ทธ๋ฌ์๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์
์ด ๊ฐ์ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ๋ฒ๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋์ ์ด์ฉ ์ ์์ด ๊ฐ์ฒด ์์ฑ์ ํจ์์ ์ง์ ๋ฉ์๋ ํจ์๋ฅผ ์ ์ํด๋ฒ๋ ธ๋ค .
์๋ฅผ ๋ค์ด ๋ฐฐ์ด์ ๊ฒฝ์ฐ instance ๋ฐฐ์ด์ ํตํด Array property(ex, length)์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฐ(prototype์ property๋ก ๋ฉ์๋๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ), ๋ฐ๋ฉด์ Object์ ๊ฒฝ์ฐ instance๋ฅผ ํตํด ๋ฉ์๋์ ์ ๊ทผํ์ง ๋ชปํ๊ณ Object.assign()๊ณผ ๊ฐ์ด Object ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํด ๋ฉ์๋์ ์ ๊ทผํด์ผ ํ๋ค.
1. arr.toString์ ์ ์ํ ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ
2. Array.toString ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ(call์ ํตํด arr๋ก this ๋ฐ์ธ๋ฉ)
3. Object.toString ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ
1. Array.toString ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ(prototype๋ก ์ง์ ๋ฉ์๋ ์ ์)
2. Array.toString ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ(call์ ํตํด arr๋ก this ๋ฐ์ธ๋ฉ)
3. Object.toString ๊ฒฐ๊ณผ ๊ฐ ์ถ๋ ฅ
์๋ ์ฌ์ง, console.dir(Object) toString ๋ฉ์๋ ์กด์ฌ
obj.toString()์ ํ ๊ฒฝ์ฐ, Object.toString์ด ํธ์ถ๋๋ค.
๊ทธ๋ ๊ธฐ์ ๋ฌธ์์ด๋ก ์ด์๊ฒ ์ถ๋ ฅํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌํํด๋ดค๋ค.
๐ ํ์ง๋ง b : [object Object]
๊ฐ ์ถ๋ ฅ๋์ด ์ฌ์ ํ ๋ง์ ๋ค์ง ์๋๋ค.
์ด๋ ๊ฒ ์ถ๋ ฅ๋๋ ์ด์ ๋ b๊ฐ ๊ฐ์ฒด์ด๋ฏ๋ก key๊ฐ b์ผ๋, this๊ฐ object๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ด๋ค.