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

λ…μ„œ λͺ©λ‘/λͺ¨λ”₯λ‹€ Modern JS Deep Dive

[λͺ¨λ”₯λ‹€] 18μž₯ ν•¨μˆ˜μ™€ 일급 객체

728x90

πŸ’š 18.1 일급 객체

 

<일급 객체 쑰건>

1. 무λͺ…μ˜ λ¦¬ν„°λŸ΄λ‘œ 생성할 수 μžˆλ‹€. 즉, λŸ°νƒ€μž„μ— 생성이 κ°€λŠ₯ν•˜λ‹€.

2. λ³€μˆ˜λ‚˜ 자료ꡬ쑰(객체, λ°°μ—΄ λ“±)에 μ €μž₯ν•  수 μžˆλ‹€.

3. ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— 전달할 수 μžˆλ‹€.

4. ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

JS 의 ν•¨μˆ˜λŠ” 이 λͺ¨λ“  쑰건을 λ§Œμ‘±ν•˜λ―€λ‘œ 일급 객체닀.

 

ν•¨μˆ˜κ°€ 일급 객체 -> ν•¨μˆ˜μ™€ 객체λ₯Ό λ™μΌν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 의미. 

ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ λ™μΌν•˜κ²Œ μ·¨κΈ‰ν•  μˆ˜λ„ μžˆλ‹€.

-> ν•¨μˆ˜λŠ” 값을 μ‚¬μš©ν•  수 μžˆλŠ” 곳이라면 μ–΄λ””λ“  λ¦¬ν„°λŸ΄λ‘œ μ •μ˜ν•  수 있으며

-> λŸ°νƒ€μž„μ— ν•¨μˆ˜ 객체둜 ν‰κ°€λœλ‹€.

 

 

일급객체 ν•¨μˆ˜μ˜ κ°€μž₯ 큰 νŠΉμ§•

: 일반 객체와 같이 ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— 전달할 수 있으며, ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것. 

 

 

 

 

 

πŸ’š18.2 ν•¨μˆ˜ 객체의 ν”„λ‘œνΌν‹°

 

ν•¨μˆ˜λŠ” 일반 객체와 λ‹€λ₯΄κ²Œ, ν•¨μˆ˜ 고유의 ν”„λ‘œνΌν‹°λ₯Ό μ†Œμœ ν•œλ‹€.

 

ν•¨μˆ˜μ˜ ν”„λ‘œνΌν‹° : arguments, caller, length, name, prototype

 

__proto__ : μ–˜λŠ” μ ‘κ·Όμž ν”„λ‘œνΌν‹°μž„. -> Object.prototype 객체의 ν”„λ‘œνΌν‹°λ₯Ό μƒμ†λ°›λŠ” 것 => λͺ¨λ“  객체가 μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

 

18.1.1 arguments ν”„λ‘œνΌν‹°

 

arguments ν”„λ‘œνΌν‹°μ˜ κ°’ : arguments 객체. 

:: ν•¨μˆ˜ 호좜 μ‹œ 전달 된 μΈμˆ˜λ“€μ˜ 정보λ₯Ό λ‹΄κ³  μžˆλŠ”, 순회 κ°€λŠ₯ν•œ μœ μ‚¬ λ°°μ—΄ 객체. => ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 지역 λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©λœλ‹€. μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†λ‹€.

초과된 μΈμˆ˜κ°€ κ·Έλƒ₯ λ²„λ €μ§€λŠ” 것이 μ•„λ‹ˆλΌ, 

λͺ¨λ“  μΈμˆ˜λŠ” μ•”λ¬΅μ μœΌλ‘œ arguments 객체의 ν”„λ‘œνΌν‹°λ‘œ 보관됨. 

 

πŸ“Œ arguments 객체의 Symbol ν”„λ‘œνΌν‹°

- arguments 객체λ₯Ό 순회 κ°€λŠ₯ν•œ 자료ꡬ쑰인 μ΄ν„°λŸ¬λΈ”λ‘œ λ§Œλ“€κΈ° μœ„ν•œ ν”„λ‘œνΌν‹°. 

 

arguments 객체의 ν™œμš©

ν•¨μˆ˜ 호좜 μ‹œ 인수 개수λ₯Ό ν™•μΈν•˜μ§€ μ•ŠλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ νŠΉμ„± 있음

-> 인수 개수λ₯Ό ν™•μΈν•˜κ³ , 이에 λ”°λ₯Έ ν•¨μˆ˜ λ™μž‘μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©

=> λ§€κ°œλ³€μˆ˜ 개수λ₯Ό ν™•μ •ν•  수 μ—†λŠ” κ°€λ³€ 인자 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  λ•Œ μœ μš©ν•¨. 

 

μ‹€μ œ 배열이 μ•„λ‹ˆλΌ μœ μ‚¬ λ°°μ—΄ κ°μ²΄μž„. 

 

πŸ“Œ μœ μ‚¬ λ°°μ—΄ 객체

- length ν”„λ‘œνΌν‹°λ₯Ό 가진 객체둜 for 문으둜 μˆœνšŒν•  수 μžˆλŠ” 객체

 

 

 

18.2.2 caller ν”„λ‘œνΌν‹°

 

λΉ„ν‘œμ€€ ν”„λ‘œνΌν‹°μž„. 

 

 

 

18.2.3 length ν”„λ‘œνΌν‹°

 

ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ μ„ μ–Έν•œ λ§€κ°œλ³€μˆ˜μ˜ 개수λ₯Ό 가리킴. 

 

argements 의 length : 인자의 개수

ν•¨μˆ˜ 객체의 length : λ§€κ°œλ³€μˆ˜μ˜ 개수

 

 

 

18.2.4 name ν”„λ‘œνΌν‹°

 

ν•¨μˆ˜μ˜ 이름을 λ‚˜νƒ€λƒ„. 

 

ES5 : 빈 λ¬Έμžμ—΄

ES6 : ν•¨μˆ˜ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžλ₯Ό κ°’μœΌλ‘œ 가짐. 

 

 

 

18.2.5 __proto__ ν”„λ‘œνΌν‹°

 

λͺ¨λ“  κ°μ²΄λŠ” [[prototype]] μ΄λž€ λ‚΄λΆ€ μŠ¬λ‘―μ„ 가지고, μ–˜λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 상속을 κ΅¬ν˜„ν•˜λŠ” ν”„λ‘œν† νƒ€μž… 객체λ₯Ό 가리킴. 

λ‚΄λΆ€ 슬둯이 κ°€λ¦¬ν‚€λŠ” ν”„λ‘œν† νƒ€μž… 객체에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ ‘κ·Όμž ν”„λ‘œνΌν‹°

 

πŸ“Œ hasOwnProperty

- 인수둜 전달 받은 ν”„λ‘œνΌν‹° ν‚€ === 객체 고유의 ν”„λ‘œνΌν‹° ν‚€ ? true : false (상속받은 ν”„λ‘œν† νƒ€μž…μ˜ ν”„λ‘œνΌν‹° 킀인 경우)

 

 

 

18.2.6 prototype ν”„λ‘œνΌν‹°

constructor 만이 μ†Œμœ ν•˜λŠ” ν”„λ‘œνΌν‹°. 

728x90
λ°˜μ‘ν˜•