์ํํธ์จ์ด๊ฐ ์ปค์ง์ ๋ฐ๋ผ ๋ณต์กํ๊ฒ ์ํจ ์คํ๊ฒํฐ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ ํ๋ ๊ฒ์ด ๋งค์ฐ ํ๋ค์ด, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๊ด์ฌ์ ๊ฐ๊ฒ ๋์๋ค.
๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ์์ ํจ์๋ก ๋๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ธฐ๋ฒ.
์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํจ์๋ฅผ ์์ฑํ์ฌ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํจ.
ํด๋ก์ ๋ ๋ด๋ถํจ์๊ฐ ์ธ๋ถํจ์์ ๋งฅ๋ฝ(context)์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ ๊ฐ๋ฅดํจ๋ค.
๋ด๋ถํจ์๋ ์ธ๋ถํจ์์ ์ง์ญ๋ณ์์ ์ ๊ทผ ํ ์ ์๋๋ฐ ์ธ๋ถํจ์์ ์คํ์ด ๋๋์ ์ธ๋ถํจ์๊ฐ ์๋ฉธ๋ ์ดํ์๋ ๋ด๋ถํจ์๊ฐ ์ธ๋ถํจ์์ ๋ณ์์ ์ ๊ทผ ํ ์ ์๋ค. ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ ํด๋ก์ ๋ผ๊ณ ํ๋ค.
function outter(){
var title = 'coding everybody';
return function(){
alert(title);
}
}
inner = outter();
inner();
์ด ๊ฒฝ์ฐ inner์์ outter์ด ํธ์ถ๋๊ณ ๊ทธ๋ค์ inner()์์ outter๋ ์ข
๋ฃ๋์ง๋ง, ์ธ๋ถํจ์์ ์ง์ญ๋ณ์ title์ด ์ถ๋ ฅ๋๋ค.
์ฆ, ํด๋ก์ ๋ ๋ด๋ถํจ์๊ฐ ์ธ๋ถํจ์์ ์ง์ญ๋ณ์์ ์ ๊ทผ ํ ์ ์๊ณ , ์ธ๋ถํจ์๋ ์ธ๋ถํจ์์ ์ง์ญ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ด๋ถํจ์๊ฐ ์๋ฉธ๋ ๋๊น์ง ์๋ฉธ๋์ง ์๋ ํน์ฑ์ ๋งํ๋ค.
Java,Python๋ฑ ๊ฐ์ฒด ์งํฅ์ธ์ด์์ ๋ง์ด ๋ณผ ์ ์๋ Class.
ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด์งํฅ์ธ์ด์ง๋ง, Class๋ ์๊ณ , ํ๋กํ ํ์
์ด๋ผ๋ ๊ฒ์ด ์์ต๋๋ค.
(ES6์์ Class๋ฌธ๋ฒ์ด ์ถ๊ฐ๋จ.)
JavaScript์์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
์ ์ ์ธํ ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด์
๋๋ค.
๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ํด์๋ ์์ ์ ๋ง๋๋๋ฐ ์ฌ์ฉ๋ ์ํ์ธ ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋๋ฐ, ์ด ๋ ๋ง๋ค์ด์ง ๊ฐ์ฒด์์ __proto__์์ฑ
์ด ์์ ์ ๋ง๋ค์ด๋ธ ์ํ์ ์๋ฏธํ๋ ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์จ๊ฒจ์ง ๋งํฌ๊ฐ ์์ต๋๋ค. ์ด ๋งํฌ๋ฅผ ํ๋กํ ํ์
์ด๋ผ๊ณ ์ ์ํฉ๋๋ค.
function Person() {
this.eyes = 2;
this.nose = 1;
}
var kim = new Person();
var park = new Person();
console.log(kim.eyes); // => 2
console.log(kim.nose); // => 1
console.log(park.eyes); // => 2
console.log(park.nose); // => 1
์ด ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์๋ eyes์ nose๊ฐ ๋๊ฐ์ฉ ์ด 4๊ฐ ํ ๋น๋ฉ๋๋ค.
100๊ฐ๋ฅผ ๋ง๋ค๋ฉด 200๊ฐ๊ฐ ํ ๋น.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํ๋กํ ํ์ ์ผ๋ก ํด๊ฒฐ.
function Person(){}
Person.prototype.eyes = 2;
Person.prototype.eyes = 1;
var kim = new Person();
var park = new Person();
์ด ๊ฒฝ์ฐ Person.prototype์ด๋ ๋น object๊ฐ ์ด๋๊ฐ ์กด์ฌํ๊ณ , Personํจ์๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด(kim,park)๋ค์ ์ด๋๊ฐ์ ์กด์ฌํ๋ Object์ ์๋ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
์ฆ, eyes์ nose๋ฅผ ์ด๋๊ฐ ๋ฃ์ด๋๊ณ , kim๊ณผ park์ด ๊ณต์ ํด์ ์ฌ์ฉํ๋ ๊ฒ.
https://velog.io/@kyusung/ํจ์ํ-ํ๋ก๊ทธ๋๋ฐ-์์ฝ
https://mangkyu.tistory.com/111
https://opentutorials.org/course/743/6544
https://medium.com/@bluesh55/javascript-prototype-์ดํดํ๊ธฐ-f8e67c286b67