μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄λ μμ μ λΆλͺ¨ μν μ νλ κ°μ²΄μ μ°κ²°λμ΄ μλ€. κ·Έλ¦¬κ³ μ΄κ²μ λ§μΉ κ°μ²΄μ§ν₯μ μμ κ°λ κ³Ό κ°μ΄ λΆλͺ¨ κ°μ²΄μ νλ‘νΌν°λ₯Ό λ§μΉ μμ μ κ²μ²λΌ μΈ μ μλ κ² κ°μ νΉμ§μ΄ μλ€. μλ°μ€ν¬λ¦½νΈμμλ μ΄λ¬ν λΆλͺ¨ κ°μ²΄λ₯Ό νλ‘ν νμ κ°μ²΄(a.k.a νλ‘ν νμ )λΌκ³ λΆλ₯Έλ€.
μμ μμ μμ±ν foo κ°μ²΄μλ toString()μ΄λΌλ λ©μλκ° μμΌλ―λ‘ μ€λ₯κ° λ°μν΄μΌ νμ§λ§, μ μμ μΌλ‘ κ²°κ³Όκ° μΆλ ₯λμλ€. μλ¬κ° λ°μνμ§ μκ³ μμ κ° μ€νλ μ μλ μ΄μ λ λ°λ‘ foo κ°μ²΄μ νλ‘ν νμ μ toString() λ©μλκ° μ΄λ―Έ μ μλμ΄ μκ³ , foo κ°μ²΄κ° μμμ²λΌ toString() λ©μλλ₯Ό νΈμΆνκΈ° λλ¬Έμ΄λ€.
foo κ°μ²΄λ₯Ό μΆλ ₯νμ λ name, age μΈμ __proto__ νλ‘νΌν°κ° μλ€λ κ²μ νμΈν μ μλ€. μ΄ νλ‘νΌν°κ° foo κ°μ²΄μ λΆλͺ¨μΈ νλ‘ν νμ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
ECMAScript λͺ μΈμμλ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄λ μμ μ νλ‘ν νμ μ κ°λ¦¬ν€λ [[Prototype]]λΌλ μ¨κ²¨μ§ νλ‘νΌν°λ₯Ό κ°μ§λ€κ³ μ€λͺ νκ³ μλ€. ν¬λ‘¬ λΈλΌμ°μ μμλ __proto__κ° λ°λ‘ μ΄ μ¨κ²¨μ§ [[Prototype]] νλ‘νΌν°λ₯Ό μλ―Ένλ€.
→ foo κ°μ²΄λ μμ μ λΆλͺ¨ κ°μ²΄λ₯Ό __proto__ λΌλ λ΄λΆ νλ‘νΌν°λ‘ μ°κ²°νκ³ μλ κ²μ΄λ€.
μμ κ°μ΄ κ°μ²΄ 리ν°λ΄ λ°©μμΌλ‘ μμ±λ κ°μ²΄μ κ²½μ° Object.prototype κ°μ²΄κ° νλ‘ν νμ κ°μ²΄κ° λλ€.
λν, κ°μ²΄λ₯Ό μμ±ν λ κ²°μ λ νλ‘ν νμ κ°μ²΄λ μμμ λ€λ₯Έ κ°μ²΄λ‘ λ³κ²½νλ κ²λ κ°λ₯νλ€.
→ λΆλͺ¨ κ°μ²΄λ₯Ό λμ μΌλ‘ λ°κΏ μλ μλ κ²μ΄λ€.
μλ°μ€ν¬λ¦½νΈμμλ μ΄λ¬ν νΉμ§μ νμ©ν΄μ κ°μ²΄ μμ λ±μ κΈ°λ₯μ ꡬννλ€.