λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Programming/Javascript

[μΈμ‚¬μ΄λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈ] μžλ°”μŠ€ν¬λ¦½νŠΈ 데이터 νƒ€μž…κ³Ό μ—°μ‚°μž 3 - ν”„λ‘œν† νƒ€μž…

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  κ°μ²΄λŠ” μžμ‹ μ˜ λΆ€λͺ¨ 역할을 ν•˜λŠ” 객체와 μ—°κ²°λ˜μ–΄ μžˆλ‹€. 그리고 이것은 마치 객체지ν–₯의 상속 κ°œλ…κ³Ό 같이 λΆ€λͺ¨ 객체의 ν”„λ‘œνΌν‹°λ₯Ό 마치 μžμ‹ μ˜ κ²ƒμ²˜λŸΌ μ“Έ 수 μžˆλŠ” 것 같은 νŠΉμ§•μ΄ μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ΄λŸ¬ν•œ λΆ€λͺ¨ 객체λ₯Ό ν”„λ‘œν† νƒ€μž… 객체(a.k.a ν”„λ‘œν† νƒ€μž…)라고 λΆ€λ₯Έλ‹€.

 

 

μ˜ˆμ œμ—μ„œ μƒμ„±ν•œ foo κ°μ²΄μ—λŠ” toString()μ΄λΌλŠ” λ©”μ„œλ“œκ°€ μ—†μœΌλ―€λ‘œ 였λ₯˜κ°€ λ°œμƒν•΄μ•Ό ν•˜μ§€λ§Œ, μ •μƒμ μœΌλ‘œ κ²°κ³Όκ°€ 좜λ ₯λ˜μ—ˆλ‹€. μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  μ˜ˆμ œκ°€ 싀행될 수 μžˆλŠ” μ΄μœ λŠ” λ°”λ‘œ foo 객체의 ν”„λ‘œν† νƒ€μž…μ— toString() λ©”μ„œλ“œκ°€ 이미 μ •μ˜λ˜μ–΄ 있고, foo 객체가 μƒμ†μ²˜λŸΌ toString() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

 

foo 객체λ₯Ό 좜λ ₯ν–ˆμ„ λ•Œ name, age 외에 __proto__ ν”„λ‘œνΌν‹°κ°€ μžˆλ‹€λŠ” 것을 확인할 수 μžˆλ‹€. 이 ν”„λ‘œνΌν‹°κ°€ foo 객체의 λΆ€λͺ¨μΈ ν”„λ‘œν† νƒ€μž… 객체λ₯Ό 가리킨닀. 

 

ECMAScript λͺ…μ„Έμ„œμ—λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  κ°μ²΄λŠ” μžμ‹ μ˜ ν”„λ‘œν† νƒ€μž…μ„ κ°€λ¦¬ν‚€λŠ” [[Prototype]]λΌλŠ” μˆ¨κ²¨μ§„ ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§„λ‹€κ³  μ„€λͺ…ν•˜κ³  μžˆλ‹€. 크둬 λΈŒλΌμš°μ €μ—μ„œλŠ” __proto__κ°€ λ°”λ‘œ 이 μˆ¨κ²¨μ§„ [[Prototype]] ν”„λ‘œνΌν‹°λ₯Ό μ˜λ―Έν•œλ‹€.

→ foo κ°μ²΄λŠ” μžμ‹ μ˜ λΆ€λͺ¨ 객체λ₯Ό __proto__ λΌλŠ” λ‚΄λΆ€ ν”„λ‘œνΌν‹°λ‘œ μ—°κ²°ν•˜κ³  μžˆλŠ” 것이닀.

 

μœ„μ™€ 같이 객체 λ¦¬ν„°λŸ΄ λ°©μ‹μœΌλ‘œ μƒμ„±λœ 객체의 경우 Object.prototype 객체가 ν”„λ‘œν† νƒ€μž… 객체가 λœλ‹€.

 

 

 

λ˜ν•œ, 객체λ₯Ό 생성할 λ•Œ κ²°μ •λœ ν”„λ‘œν† νƒ€μž… κ°μ²΄λŠ” μž„μ˜μ˜ λ‹€λ₯Έ 객체둜 λ³€κ²½ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

→ λΆ€λͺ¨ 객체λ₯Ό λ™μ μœΌλ‘œ λ°”κΏ€ μˆ˜λ„ μžˆλŠ” 것이닀. 

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ΄λŸ¬ν•œ νŠΉμ§•μ„ ν™œμš©ν•΄μ„œ 객체 상속 λ“±μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•œλ‹€.