μ΄λ² ν¬μ€ν μμλ μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ μ λν΄ μ 리ν΄λ³Έλ€. νλ‘ν νμ μ λ΄μ©μ΄ λ§μμ λνΈ μ λμ λλ μ ν¬μ€ν νκ² λ κ² κ°λ€.
μ΄λ² νΈμμλ νλ‘ν νμ μ ν΅ν μμμ λν΄ κ°λ³κ² μμ보μ!
μμ(inheritance)μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬κ°λ μΌλ‘μ¨ νΉμ κ°μ²΄μ νλ‘νΌν°λ λ©μλλ₯Ό λ€λ₯Έ κ°μ²΄κ° λ°μμμ κ·Έλλ‘ μ¬μ©ν μ μκ² νλ κΈ°λ₯μ΄λ€.
Javaλ C++ κ°μ λ€λ₯Έ κ°μ²΄μ§ν₯ μΈμ΄μμλ Classλ₯Ό μ΄μ©νμ¬ μμμ ꡬννλ€.
νμ§λ§ μλ°μ€ν¬λ¦½νΈμμλ νλ‘ν νμ
μ κΈ°λ°μΌλ‘ μμμ ꡬννλ€. MDNμ νλ‘ν νμ
μ λν μ€λͺ
μ 보μ.
μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ μ κΈ°λ°μΌλ‘ μμμ ꡬννλ€. (ES2015λΆν° class ν€μλλ₯Ό μ§μνκΈ° μμνμΌλ, λ¬Έλ²μ μΈ μλ μΌ λΏμ΄λ©° μλ°μ€ν¬λ¦½νΈλ μ¬μ ν νλ‘ν νμ κΈ°λ°μ μΈμ΄λ€.)
κ·Έλ¬λ©΄ μλ°μ€ν¬λ¦½νΈμμ νλ‘ν νμ μ ν΅ν΄ μμμ΄ μ΄λ€μ§λ€λ κ²μ μκ² λμΌλ, νλ‘ν νμ μ λν΄ μ‘°κΈ λ μμΈν μμ보μ. μλ°μ€ν¬λ¦½νΈμμμ μμμ μ νν μ΄μΌκΈ°νλ©΄ νλ‘ν νμ κ°μ²΄λ₯Ό ν΅ν΄μ μ΄λ£¨μ΄μ§λ€.
νλ‘ν νμ κ°μ²΄λ λ¨μν νΉμ κ°μ²΄μ λΆλͺ¨ μν μ νλ κ°μ²΄λ‘μ¨ μμμ μν΄ μ¬μ©λλ€. λΆλͺ¨ κ°μ²΄λ νλ‘ν νμ κ°μ²΄λ₯Ό ν΅ν΄ μμμκ² κ³΅μ νλ‘νΌν°λ₯Ό μ 곡νκ³ , μμ κ°μ²΄λ λΆλͺ¨μ νλ‘ν νμ κ°μ²΄λ₯Ό ν΅ν΄ λΆλͺ¨μ νλ‘νΌν°λ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
λν, μμ κ°μ²΄λ [[prototype]] μ κ·Όμ, μ¦ .__proto__λ₯Ό ν΅ν΄ λΆλͺ¨μ νλ‘ν νμ κ°μ²΄μ μ§μ μ κ·Όν΄λ³Ό μ μλ€.
μ¬μ€ μ°λ¦¬λ μ΄λ―Έ νλ‘ν νμ μ ν΅ν μμμ κ²½ννλ€.
λ€μ μ½λλ₯Ό 보며 μ΄ν΄ν΄λ³΄μ.
const person = {
age : 4
};
// μ μνμ§ μμ hasOwnProperty λ©μλ νΈμΆ
person.hasOwnProperty('age') // true
ageλΌλ νλ‘νΌν°λ₯Ό κ°λ κ°λ¨ν κ°μ²΄ personμ μ μνλ€.
κ·Έλ¦¬κ³ κ·Έ νμ person κ°μ²΄μ μ μνμ§ μμ hasOwnProperty
λ©μλλ₯Ό νΈμΆνλλ° trueλΌλ κ°μ λ°νν κ²μ λ³Ό μ μλ€.
μ΄λ»κ² λ μΌμΌκΉ? person κ°μ²΄λ₯Ό μμΈν λ―μ΄λ³΄μ.
person κ°μ²΄λ₯Ό μ΄ν΄λ³΄λ©΄ μ°λ¦¬κ° μ μν μμ± ageλΌλ μμ± μΈμλ .__proto__ λΌλ νλ‘νΌν°λ₯Ό κ°μ§κ³ μκ³ , μ°λ¦¬κ° μ¬μ©νλ hasOwnProperty
λ©μλλ μ΄ κ°μ²΄κ° κ°μ§κ³ μλ κ²μ νμΈν μ μλ€.
μ¦ person κ°μ²΄λ λΆλͺ¨μ νλ‘ν νμ κ°μ²΄μ μλ hasOwnPropertyλ₯Ό μ€νν κ²μ΄λ€!
κ·Όλ°...λ μ무κ²λ μμνμ μ΄ μλλ°?π€
μλ¬Έμ νκΈ°μν΄ MDNμμ Objectμ κ΄ν κΈ μΌλΆλ₯Ό κ°μ Έμλ€.
μλ°μ€ν¬λ¦½νΈμμ λͺ¨λ κ°μ²΄λ€μ Objectμ μμμ΄λ€. λͺ¨λ κ°μ²΄λ Object.prototypeμΌλ‘λΆν° λ©μλμ μμ±μ μμλ°λλ€.
MDN λ¬Έμμ λ°λ₯΄λ©΄ μ°λ¦¬κ° μ μν personμ΄λΌλ κ°μ²΄λ Objectμ μμμ΄κ³ , Object.prototype κ°μ²΄λ‘λΆν° λ©μλμ μμ±μ μμ λ°μμ κ²μ΄λ€!
κ·Έλ¬λ©΄ personμ λΆλͺ¨λ Objectμ΄κ³ , person.__proto__μ μ 체λ Objectμ νλ‘ν νμ κ°μ²΄μΈ Object.prototypeμλ κ²μΌκΉ?
κ·Έλ λ€. μ°λ¦¬κ° μ μν person κ°μ²΄λ Objectμ μμμ΄κ³ , κ·Έλμ μ°λ¦° Object.prototype κ°μ²΄κ° κ°μ§κ³ μλ λ©μλμΈ hasOwnProperty
λ₯Ό μ¬μ©ν μ μμλ κ²μ΄λ€!
μ¦, personκ°μ²΄λ Object κ°μ²΄λ₯Ό μμ λ°μλ€λ μ¬μ€μ μ μ μλ€.
μ 체μ μΈ κ΅¬μ‘°λ μλμ κ°λ€.
μ΄λ―Έμ§ μΆμ² : https://poiemaweb.com/js-prototype
- Objectλ λͺ¨λ κ°μ²΄μ λΆλͺ¨μ΄λ€. (λͺ¨λ κ°μ²΄λ Object κ°μ²΄λ₯Ό μμνλ€.)
- λ°λΌμ Object.prototype κ°μ²΄κ° κ°λ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
- λΆλͺ¨λ prototype κ°μ²΄λ₯Ό ν΅ν΄ λ©μλλ₯Ό 곡μ νκ³ , μμ κ°μ²΄λ κ°μ²΄λ .__proto__μ ν΅ν΄ λΆλͺ¨μ prototype κ°μ²΄μ μ κ·Ό κ°λ₯νλ€.
λ€μ νΈμλ νλ‘ν νμ μ ν΅ν μμλ°©λ²κ³Ό, νλ‘ν νμ 체μΈμ λν΄μ μμ보μ!
κΈμ μ½κ³ λμ λ§μ΄ λ°°μ μ΅λλ€! ^^
λ€μ νΈλ κΈ°λν κ²μ!!