μ΅κ·Ό μ΄μ μ 곡λΆνλ λ΄μ©μ΄ μ κΈ°μ΅μ΄ λμ§ μμμ κΉ¨λ«κ³ μλ°μ€ν¬λ¦½νΈ κΈ°λ³Έ μ€μ κΈ°λ³Έ νλ‘ν νμ
μ λν΄μ μ¬νμ΅νλ€.
π§ νλ‘ν νμ μ΄λ?
μλ°μ€ν¬λ¦½νΈλ νν μ¬μ©νλ ν΄λμ€κ°λ μ΄ ES6(2015)μ λμ μ΄ λμλ€. κ·Έλ λ€λ©΄ μ½λ μ¬μ¬μ©, μΊ‘μνλ₯Ό μ΄λ»κ² νμκΉ? μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ μ κΈ°λ°μΌλ‘ μμκ³Ό μΊ‘μνλ₯Ό μ§μν μ μλ€.
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄μλ ν΄λΉ μμ±μ ν¨μλ₯Ό μ¬μ©νμ¬ μμ±λ μΈμ€ν΄μ€μ μμ μν μ νλ κ°μ²΄μΈ νλ‘ν νμ μ΄ μ‘΄μ¬νλ€. λ°λΌμ λͺ¨λ κ°μ²΄λ [[Prototype]]μ΄λΌλ μΈν°λ μ¬λ‘―(internal slot)μ κ°μ§κ³ μλ€. [[Prototype]]μ κ°μ null λλ κ°μ²΄λ‘ νλ‘ν νμ 체μΈμ μ΄μ©ν΄ νλ‘ν νμ μ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
λΈλΌμ°μ μμ κ°μ²΄λ₯Ό μΆλ ₯ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ λ΄μ©μ λ³Ό μ μλ€.
objλΌλ κ°μ²΄λ₯Ό κ°μ²΄λ¦¬ν°λ΄μ ν΅ν΄ μμ±νκ³ console.log()λ₯Ό ν΅ν΄ μΆλ ₯νλ€. λ΄λΆμ κ°μ 보면 [[Prototype]]μ΄λΌλ κ²μ λ³Ό μ μλλ° μ΄λ λ΄κ° μ μΈν obj κ°μ²΄μ νλ‘ν νμ μ μλ―Ένλ€. κ°μ²΄ 리ν°λ΄μ ν΅ν΄ μ μΈνμ§λ§ λ΄λΆμ μΌλ‘ μμ±μν¨μλ₯Ό νΈμΆνμΌλ©°, νΈμΆν μμ±μν¨μλ Objectμ μμ±μ ν¨μλ‘ λ΄κ° μ μΈν κ°μ²΄μ νλ‘ν νμ μ΄λ€.
κ°μ²΄κ° μλ λ°°μ΄μ ν΅ν μμλ₯Ό νμΈν΄λ΄€λ€.
μ΄λ²μλ 리ν°λ΄μ΄ μλ Array μμ±μ ν¨μλ₯Ό μ΄μ©ν΄μ arrμ ν λΉνλ€. μΆλ ₯λ κ°μ μ΄ν΄λ³΄λ©΄ μ΄λ²μλ [[Prototype]]μ Arrayκ° μλ κ²μ λ³Ό μ μλ€.
μ¬κΈ°μ νλ² λ μκ°ν΄λ³Ό μ μλ κ²μ΄ μλ€. μλ°μ€ν¬λ¦½νΈμ λ°°μ΄μ μ€μ λ‘ κ°μ²΄λ‘ ꡬνμ΄ λμ΄ μλ€κ³ νλ€. κ·Έλ λ€λ©΄ λ°°μ΄μ νλ‘ν νμ μ Objectκ° λμ΄μΌ νλ κ²μ΄ μλκΉ?
λ§λ€! Arrayλ₯Ό νΌμ³μ μ΄ν΄λ³΄λ©΄ Arrayμ λ©μλλ€μ΄ μ λμ΄λκ³ μ μΌ μλμ [[Prototype]]μ΄ μλ κ²μ λ³Ό μ μλλ° μ¬κΈ°μλ Objectκ° μλ κ²μ νμΈ ν μ μλ€.
μ΄λ κ² λͺ¨λ κ°λ€μ νλ‘ν νμ μ μ΄μ©νλ€. κ·Έλ λ€λ©΄ νλ‘ν νμ μ νμΈνλ λ°©λ²μ λ λκ° μμκΉ?
__proto__λΌλ νλ‘νΌν°λ₯Ό μ΄μ©ν΄ νμΈν μ μλ€. __proto__ νλ‘νΌν°μ μ κ·Όνλ©΄ λ΄λΆμ μΌλ‘ Object.getPrototypeOfκ° νΈμΆλμ΄ νλ‘ν νμ
κ°μ²΄λ₯Ό λ°ννλ€.
μμμ arr.__proto__λ₯Ό μ΄μ©ν΄ μ μΈνλ arrμ νλ‘ν νμ κ°μ²΄λ₯Ό νμΈν΄λ΄€λ€. μ΄ κ°μ²΄λ Array κ°μ²΄μ΄λ€.
π§π»π» prototypeμ μ΄μ©νλ μ΄μ λ 무μμΌκΉ?
μμ μμμ²λΌ μμ±μ ν¨μλ₯Ό μ΄μ©ν΄μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ ν΄λΉ μΈμ€ν΄μ€μλ age, address, getInfoλΌλ νλ‘νΌν° λ° λ©μλλ₯Ό κ°μ§κ³ μλ€. μ΄λ μΈμ€ν΄μ€λ₯Ό μ¬λ¬κ° λ§λ λ€λ©΄ λΆνμν 리μμ€λ₯Ό λλΉνκ² λλ€. μλνλ©΄ getInfoλ₯Ό λ§€λ² μμ±νμ§ μμλ λ¨μλ λΆκ΅¬νκ³ getInfoκ° λ§€λ² μμ±λκΈ° λλ¬Έμ΄λ€.
jbλ₯Ό μΆλ ₯ν΄λ³΄λ©΄ age, address, getInfoκ° μ‘΄μ¬νλ κ²μ μ μ μλ€.
prototypeμ μ΄μ©νλ©΄ λ€μκ³Ό κ°μ λ°©λ²μ΄ κ°λ₯νλ€.
prototypeμ μ΄μ©ν΄ getInfoλ₯Ό μΆκ°νμ λ jbμλ getInfo λ©μλκ° μ‘΄μ¬νμ§ μλλ€. νμ§λ§ prototypeμ λ©μλμ getInfoκ° μ‘΄μ¬νλ€. μ²μ Jongbinμ μ΄μ©ν λ°©λ²μ λ§€λ² getInfoλΌλ ν¨μλ₯Ό λ©λͺ¨λ¦¬μ ν λΉνμ§λ§ λ λ²μ§Έλ‘ prototypeμ μ΄μ©ν λ°©λ²μ prototypeμ λ©μλλ‘ λ±λ‘λμ΄ λ¨ νλ²λ§ ν λΉλλ€.
μ΄λ° λ°©λ²μ΄ κ°λ₯ν μ΄μ λ νλ‘ν νμ μ²΄μΈ λλ¬Έμ΄λ€. νλ‘ν νμ 체μΈμ΄λ μꡬνλ κ°μ΄ μμ μκ² μ‘΄μ¬νμ§ μλ κ²½μ° μμ μμλ₯Ό νμνλ κ²μ λ§νλλ° μμ κ²½μ°μλ λ€μκ³Ό κ°λ€.
jb μΈμ€ν΄μ€μλ getInfoκ° μ‘΄μ¬νμ§ μλλ€ λ°λΌμ μμμμμΈ [[prototype]]μ νμΈνλ€. Jongbin.prototypeμλ getInfoλΌλ λ©μλκ° μκΈ° λλ¬Έμ μ΄λ₯Ό μ¬μ©ν μ μλ€.
λν μμμ λ΄€λ―μ΄ λ°°μ΄μ΄ κ°μ²΄λ‘ μ΄λ£¨μ΄μ Έ μλ―μ΄ ν¨μ λν κ°μ²΄λ‘ μ΄λ£¨μ΄μ Έ μλ€.
jbμλ toString()μ΄λΌλ λ©μλκ° μμμλ λΆκ΅¬νκ³ μ μμ μΌλ‘ λμνλ€. μλνλ©΄ μμ κ·Έλ¦Όμ λ§λΆμ¬ Jongbin.prototypeμ μμ νλ‘ν νμ μΌλ‘ Objectκ° μκΈ° λλ¬Έμ΄λ€.
μ€μ λ‘ μΆλ ₯ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
μ°λ¦¬λ μ΄λ° νλ‘ν νμ μ μ΄μ©ν΄μ ν΄λμ€λ₯Ό μ¬μ©νμ§ μλλΌλ μμμ ꡬννκ³ μ½λμ μ¬μ¬μ©μ ν μ μλ€!
'JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Javascript] μλ°μ€ν¬λ¦½νΈ κ°μ²΄ - νλ ν΄λμ€, μΈλΌμΈμΊμ (0) | 2024.10.06 |
---|---|
[JavaScript] μ€ν컨ν μ€νΈ (0) | 2023.02.21 |