๋ชฉ์ฐจ
JS์ prototype์ ๋ํด์ ์์๋ณด์.
0. ์์(inheritance)
๊ฐ์ฒด์งํฅ์ ๊ฐ๋ ์ค ํ๋์ธ ์์์ ๊ฐ๋จํ ํํํ๋ฉด ๋ถ๋ชจ ๊ฐ์ฒด์ ์์ฑ์ ์์ ๊ฐ์ฒด๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋งํ๋ค.
JS์์ ์ด๊ฒ์ ๊ตฌํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋ช๊ฐ์ง ์๋๋ฐ
์ฒซ๋ฒ์งธ๋ ์ ๋ฒ์๊ฐ์ ๋ค๋ฃจ์๋ constructor ๋ฌธ๋ฒ์ด๋ค.
2023.08.08 - [๐ | WEB DEV/Vanilla JS] - JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (33)_ constructor ๋ฌธ๋ฒ
๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ด prototype์ด๋ค.
1. prototype
๋ชจ๋ ์์ฑ์ ํจ์๋ค์ prototype์ ๋ด์ฅํ๊ณ ์๋ค.
function Student(name, code){
this.name = name;
this.code = code;
}
console.log(Student.prototype);
prototype์ ๊ธฐ๋ฅ
prototype์ ๋ถ๋ชจ๊ฐ ์์์๊ฒ ์ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. ๋น์ ํ์๋ฉด ์ ์ ์๋ผ๊ณ ํ ์ ์๋ค.
์ด๋ฅผ ์ด์ฉํ๋ฉด ์์์ ๊ตฌํํ ์ ์๋๋ฐ
๋ถ๋ชจ.prototype์ ๋ฑ๋ก๋ ๋ณ์, ํจ์ ๋ฑ์
๋ถ๋ชจ๋ก ๋ถํฐ ๋ง๋ค์ด์ง ์๋ก์ด ์์ object๊ฐ ์ ๋ถ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ ํน์ง์ prototype์๋ ์ฌ๋ฌ ๊ฐ์ ๋ฑ๋กํ ์ ์๊ณ , ํจ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฅํ๋ค.
๋ํ, ์ด๊ฒ์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ '๋ถ๋ชจ'๋ง์ด ๊ฐ์ง๊ณ ์๋๋ค.
์์
function Student(name, code){
this.name = name;
this.code = code;
}
Student.prototype.class = 1;
let student1 = new Student();
console.log(student1.class);
--------
1
์ด์ฒ๋ผ prototype์ ์ถ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์์ ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ ์๋ค.
prototype ์๋์๋ฆฌ
์์์ ๋ณธ ์์์ฒ๋ผ ์๋ก์ด ์์ ๊ฐ์ฒด๋ ๋ถ๋ชจ.prototype์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค.
์ด๊ฒ์ ์๋์๋ฆฌ๋ฅผ ์์๋ณด๋ฉด
JS์ ์์ง์ด Object์ ๊ฐ์ ์ถ๋ ฅํ ๋
1) ํ ๊ฐ์ฒด๊ฐ ํด๋น ์์ฑ์ ๊ฐ์ง๊ณ ์๋๊ฐ?
2) ๋ถ๋ชจ ๊ฐ์ฒด๊ฐ ํด๋น ์์ฑ์ ๊ฐ์ง๊ณ ์๋๊ฐ?
3) ๋ถ๋ชจ์ ๋ถ๋ชจ ๊ฐ์ฒด๊ฐ ํด๋น ์์ฑ์ ๊ฐ์ง๊ณ ์๋๊ฐ?
4) ...
์ด์ฒ๋ผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ฉฐ ๊ฐ์ ์ฐพ์๋ธ๋ค.
๊ทธ๋ ๊ธฐ๋๋ฌธ์ ์์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ์ง์ ๊ฐ๊ณ ์์ง ์์๋ ๋ถ๋ชจ์ prototype์ ์กด์ฌํ๋ ๊ฐ์ ๋ฐํํ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ํน์ ๋ฉ์๋๋??
์๋ก์ด array๋ฅผ ๋ง๋ค์์ ๋ JS์ ๋ด์ฅ๋์ด์๋ forEach(), sort(), toString() ๋ฑ์ ๋ฉ์๋๋ ๊ณผ์ฐ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๊น?
let arr1 = [1,2,3];
let arr1 = new Array(1,2,3);
์์ ๋ ์ฝ๋๋ ์๋ฒฝํ๊ฒ ๊ฐ์ ๊ฒ์ ์๋ฏธํ๋ค.
๋๊ดํธ์ ์์๋ฅผ ๋ฃ๋ ๊ฒ์ ๋ด๋ถ์ ์ผ๋ก new Array()๋ฅผ ํตํด ์๋ก์ด array ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
์ฆ, Array() ๋ผ๋ constructor ํจ์๋ฅผ ์ด์ฉํ์ฌ ์์ array๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ Array.prototype์ ๋ฑ๋ก๋์ด์๋ ํจ์๋ค์ ์๋กญ๊ฒ ๋ง๋ array ๋ค์ด ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๊ฒ๋ค์ด ๋ฐ๋ก forEach(), sort(), toString()์ ๊ฐ์ ๋ฉ์๋์ธ ๊ฒ์ด๋ค.
3. constructor ์ prototype์ ์ฐจ์ด
๋ง์ง๋ง์ผ๋ก ์ด ๋์ ์ฐจ์ด์ ๋ํด์ ์์๋ณด๋ฉด
constructor๋ ์์์๊ฒ๋ ๋ฐ์ดํฐ๊ฐ ์ ํด์ง๋ค.
prototype์ ๋ถ๋ชจ๋ง์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ค.
์ด ํน์ง์ ์ด์ฉํ์ฌ ์ํฉ์ ๋ง๊ฒ ํ์ฉํ๋ฉด ๋๋ค!
'๐ | WEB DEV > Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (33)_ constructor ๋ฌธ๋ฒ (0) | 2023.08.08 |
---|---|
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (31)_ ํจ์ ํ๋ผ๋ฏธํฐ (default, arguments) (0) | 2023.08.07 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (30)_ Spread Operator (0) | 2023.08.06 |
JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ (29)_ Tagged Literals (0) | 2023.08.05 |
JS_๋ฌธ๋ฒ (๊ฐ์ธ)_ ๋ณ์ ์ด์ ๋ฆฌ (0) | 2023.08.04 |
๋๊ธ