JavaScript๋ prototype ๊ธฐ๋ฐ ์ธ์ด๋ก, ๋ชจ๋ ๊ฐ์ฒด๋ค์ด ๋ฉ์๋์ ์์ฑ๋ค์ ์์ ๋ฐ๊ธฐ ์ํ ํ ํ๋ฆฟ์ผ๋ก์จ, ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋๋ค.
ํ๋กํ ํ์ ๊ฐ์ฒด๋ ์์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ก๋ถํฐ ์์๋ฐ์ ์ ์๊ณ , ๊ทธ ์์ ํ๋กํ ํ์ ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ์ด๋ฅผ ํ๋กํ ํ์ ์ฒด์ธ(prototype chain)์ด๋ผ๊ณ ํ๋ฉฐ,๋ค๋ฅธ ๊ฐ์ฒด์ ์ ์๋ ๋ฉ์๋์ ์์ฑ์ ํ ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค. -MDN
class Human{
constructor(name, age){
this.name = name;
this.age = age;
}
sleep(){
console.log(`${this.name}์ ์ ์ ๋ค์์ต๋๋ค.`);
}
}
let kimcoding = new Human('๊น์ฝ๋ฉ', 30);
// .prototype ์ ์ฌ์ฉํด prototype ์์ฑ์ ์ง์ ํ์ธํด ๋ณผ ์ ์๋ค.
Human.prototype.constructor === Human; // true
// .__proto__ ์์ฑ์ ์ฌ์ฉํด kimcoding์ prototype ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
Human.prototype === kimcoding.__proto__; // true
Human.prototype.sleep === kimcoding.sleep; // true
// instance์์ constructor์ ์ ๊ทผํ ๋๋ .constructor ์ฌ์ฉ์ ์ฌ์ฉํด ์ ๊ทผ ๊ฐ๋ฅ
kimcoding.constructor; // ฦ Human()
kimcoding.constructor.name; // 'Human'
Human.prototype.constructor === kimcoding.constructor // true
this.
new
ํค์๋๋ก instance๋ฅผ ์์ฑํ์ ๋, ํด๋น Instance๊ฐ this
์ ๊ฐ์ด๋๋ค.
.prototype
์์ฑ์ ํจ์(constructor)๊ฐ .prototype
์์ฑ์ ์ด์ฉํด ํ๋กํ ํ์
๊ฐ์ฒด(์ํ ๊ฐ์ฒด)๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
์์ ์์๋ฅผ ๋ณด๋ฉด,
Human.prototype.sleep === kimcoding.sleep; // true
Human class์ sleep ๋ฉ์๋๋ ํ๋กํ ํ์
์ ์์ผ๋ฉฐ, Human class์ instance์ธ kimcoding์์ ์ฌ์ฉํ ์ ์๋ค.
.__proto__
.__proto__
์์ฑ์ ์ด์ฉํด ํ๋กํ ํ์
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํด, ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์ ์ ํ๋กํ ํ์
์ ์ ๊ทผํ ์ ์๋ค(๋งํฌ).
์์ ์์๋ฅผ ๋ณด๋ฉด,
Human.prototype === kimcoding.__proto__; // true
Human class์ ํ๋กํ ํ์
์ Human class์ instance์ธ kimcoding์ __proto__
์ ๊ฐ๋ค.
.constuctor
.constructor
์์ฑ์ ์ด์ฉํด ์๋ณธ ์์ฑ์ ํจ์์ ์ ๊ทผํ ์ ์๋ค.
์์ ์์๋ฅผ ๋ณด๋ฉด,
Human.prototype.constructor === kimcoding.constructor // true
Human class์ ํ๋กํ ํ์
์ ์์ฑ์ ํจ์๋ Human class๋ก, Human class์ instance์ธ kimcoding์ ์๋ณธ ์์ฑ์ ํจ์์ ๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์์ ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ kimcoding์ ์ ๋ ฅํ๋ฉด ์๋์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค.
Human {
name: '๊น์ฝ๋ฉ',
age: 30,
__proto__: {
constructor: ฦ Human(),
sleep: ฦ sleep()
}
}
kimcoding์ __proto__
๋ Human.prototype์ ๊ฐ๋ฆฌํจ๋ค.
Human.prototype์ constructor๋ Human class๋ฅผ ๊ฐ๋ฆฌํค๊ณ , Human์ prototype์ Human.prototype์ ๊ฐ๋ฆฌํจ๋ค.
Reference:
์ฝ๋์คํ
์ด์ธ
MDN: https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes