November 01, 2020
function Person() {} //statement ์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ฐ์ฒด๋ผ๊ณ ํ๋ค.
const Person = new Function() // ์์ ๋์ผํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ๊ฐ์ฒด์ด๋ค. ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ํจ์๋ค์ property ๋ค์ ๊ฐ์ง ์ ์๋ค.
function Person(name, first, second) {
this.name = name
this.first = first
this.second = second
}
ํจ์ Person ์ ์ ์ธ์ ํตํด ๋ถํ ๋ฐ์ค์ธ Person ๊ฐ์ฒด ์์์๋ ๋ด๋ถ์ ์ผ๋ก โprototypeโ ์ด๋ผ๋ ํ๋กํผํฐ๊ฐ ์๊ธฐ๊ณ ,
๊ทธ ํ๋กํผํฐ๋ Person ์ prototype ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. (๋ น์ ๋ฐ์ค ์ฐธ์กฐ)
๋ น์ ๋ฐ์ค๋ฅผ ๋ณด๋ฉด ์ฆ, Person.prototype ๊ฐ์ฒด ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ๋ น์ ๋ฐ์ค์ธ Person.prototype ๊ฐ์ฒด๋ ์์ ์ด Person ์ ์์์ด๋ผ๋ ๊ฒ์ ๊ธฐ๋กํ๊ธฐ ์ํด โconstructorโ ๋ผ๋ ํ๋กํผํฐ๋ฅผ ๋ง๋ค๊ณ
๊ทธ ํ๋กํผํฐ๋ Person ์ ๊ฐ๋ฆฌํจ๋ค (์ํธ ์ฐธ์กฐ๋ฅผ ํ๋ค)
์ผ๋จ ์ฌ๊ธฐ ๊น์ง ๋๊ณ ..
์ฝ๊ฒ ์ฝ๊ฒ ์ฝ๊ฒ ํ ๋ฌธ์ฅ์ผ๋ก ์ค์ฌ๋ณด๋ฉด
์ฌ๋์ ์ฐ์ด๋ด๋? ๊ณต์ฅ์ธ Person ๊ณต์ฅ์ ์ค๋ฆฝ๋์๋ง์ name, first, second ๋ฑ์ ์์ฑ์ด ์๊น๊ณผ ๋์์ ๋ด๋ถ์ ์ผ๋ก ๋ prototype ์ด๋ผ๋ ์์ฑ๋ ํจ๊ป ์๊ธฐ๊ณ ๊ทธ ์์ฑ์ Person.prototype ์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ฉฐ ๊ทธ ํด๋น ๊ฐ์ฒด ์ญ์ constructor ๋ผ๋ ํ๋กํผํฐ๋ฅผ ๋ง๋ฌ๊ณผ ๋์์ Person ๊ณต์ฅ์ ๊ฐ๋ฆฌํจ๋ค๋ ๋ง์ด๋ค.
์ ๋๊ฐ์ด ์ด๋ ต๋ค..
Person.prototype.sum = function() {}
ํฉ์ ๊ตฌํ๋ ํจ์๋ฅผ ์ ์ธํ๋ค.
๊ทธ๋ฌ๋ฉด ๊ทธ๋ฆผ ๊ทธ๋๋ก Person.prototype ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ ์ด์ javascript ๋ sum() ์ด ์๋ค. ๊ทธ๋ผ ์์ฑํ์. ํ๋ฉด์ constructor ์ sum() ํจ์๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
const kim = new Person('kim', 10, 20)
๋งจ ์์ Person ์ด๋ผ๊ณ ํ๋ constructor function ์ด ์คํ๋๋ฉด์ (๊ณต์ฅ์ด ๊ฐ๋๋๋ฉด์) this ์ ๊ฐ์ด ์ธํ ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ ธ๋ ๋ฐ์ค์ ๋ด์๋ค.
์ด๋ ๋ฏ name, first, second ๋ผ๋ ์์ฑ์ด ์์ฑ์ด ๋จ๊ณผ ๋์์,
__proto__ ๋ผ๋ ์ฃผ์ธ๊ณต์ด ์๋ ์์ฑ์ด ๋๋ค.
์ด์ kim ์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ Person ์ prototype ์ด __proto__ ๊ฐ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ Person ์ prototype ์ ํตํด์๋ Personโs prototype ์ ์ ๊ทผ์ ํ ์ ์์๊ณ ,
kim ์ __proto__ ๋ฅผ ํตํด์๋ Personโs prototype ์ ์ ๊ทผ์ ํ ์ ์๊ฒ ๋์๋ค.
console.log(kim.name)
์๋ฐ์คํฌ๋ฆฝํธ ์์๋ kim ์ด๋ผ๋ ๊ฐ์ฒด์ name ์ด๋ผ๋ property ๊ฐ ์๋์ง ์ฐ์ ์ ์ผ๋ก ์ฐพ๋๋ค. ๋ ธ๋ ๋ฐ์ค์ ์๋ค.
์๋ค๋ฉด __proto__ ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด์ name ์ด ์๋์ง ์ฐพ๊ฒ ๋๋ค.
sum()
sum() ์ด๋ผ๋ ๋ฉ์๋๊ฐ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์๋ __proto__ ๋ฅผ ํตํด ๊ฐ๋ฆฌํค๊ณ ์๋ Personโs prototype ์ sum ์ด ์๋์ง๋ฅผ ์ฐพ๋๋ค.
์๋ค. ์ฌ์ฉํ๋ค.
๋ง์ฝ ์๋ค. ๊ทธ๋ฌ๋ฉด ์๋ __proto__ ๊ฐ ์์ ํ ๋ ๋ ์ฐพ์๊ฐํ ์ง๋ง ์ผ๋จ ๋ ผ์ธ๋ก ๋๋ค.
์์ฑ์๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด์์ ํด๋น ๊ฐ์ฒด์ ์๋ ํจ์๋ฅผ ํธ์ถํ ๋ ๊ฐ์ฒด ํ๋กํผํฐ __proto__ ๋ฅผ ํตํด์ ๋ถ๋ชจ prototype ๊ฐ์ฒด์์ ๋ฉ์๋๋ฅผ ์ฐพ์ ํธ์ถํฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ถ๋ชจ์์ prototype ํ๋กํผํฐ๋ ๋ฐ๋ก prototype ๊ฐ์ฒด๋ฅผ ๋์ด ๋ฐ๋ก ์์ ๊ฐ์ฒด์์ ํธ์ถํ ๋ ๋ถ๋ฅผ์ ์๋๋ก ๋ง๋ค๊ณ ์์ __proto__ ๊ฒฝ์ฐ๋ ๋ถ๋ชจ prototype์ผ๋ก ์ฐ๊ฒฐํ์ฌ ๋ถ๋ชจ ํ๋กํผํฐ, ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋๋ก ํฉ๋๋ค.
๋ผ๊ณ ์จ๋์ ๋๊ธ์ ๋ถ์ฌ ์๋๋ฐ ์ด๊ฑด ์ข๋ ์๊ฐํด ๋ด์ผ ํ ๊ฑฐ ๊ฐ๋ค.