[JS Tam9μν] #6 Prototype __proto__ [[Prototype]]
Prototypeμ νΌνκ² λ μ΄μ
JavaScriptλ₯Ό 곡λΆνλ νλ¦°μ΄λΌλ©΄ μ μ§ νΌνκ³ μΆκ³ λλμ μΌλ‘ μ΄ν΄λ λμ§λ§ μ μΌλ‘ μ€λͺ ν μ μλ κ·Έλ° ν€μλλ€μ΄ μλ€.
κ·Έμ€ νλλ λ°λ‘ λ΄κ°λ§λ .
Prototype μΌνμ
κ·Έ μ΄μ λ pro~
λ₯Ό λ¨λ°νλ μ€λͺ
λλ¬Έ..
"μμ±μ ν¨μμ νλ‘ν νμ
νλ‘νΌν° [[νλ‘ν νμ
]]λ΄λΆμ¬λ‘―μ κ°μ κ°λ¦¬ν¨λ€~"
κ·Όλ° μ΄μΉκ΅¬λ€μ νΌν΄λ€λ
λλ μ μ λμ μκΈΈμ΄ κ°λ‘λ§νλ λλμ λ°μκ³ (?)
κ±λ€λ€κ³Ό νλμ© λ§μ₯λ μ JS짱βοΈμ λ¨ΉμΌλ €κ³ νλ€.
곡λΆν λ΄μ© μμν©λλ€..
Prototype
μΌλ¨ νλ²μ μ 리λ₯Ό ν΄λ³΄μλ©΄
Prototype
: νλ‘ν νμ
κ°μ²΄λ‘ νμ κ°μ²΄μκ² μμ μ νλ‘νΌν°μ λ©μλλ₯Ό μμν¨[[Prototype]]
: νλ‘ν νμ
κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ΄λΆμ¬λ‘―__proto__
: νλ‘ν νμ
μ μ κ·ΌνκΈ° μν μ κ·Όμ νλ‘νΌν° [[Prototype]] λ΄λΆ μ¬λ‘―μ κ°μ μ μΌλ‘ μ κ·Όνκ² ν¨
νλ‘ν νμ
μ΄λ€ κ°μ²΄μ μμ κ°μ²΄ μν μ νλ κ°μ²΄λ‘ νμ κ°μ²΄μκ² μμ μ νλ‘νΌν°μ λ©μλλ₯Ό μμνλ€.
JSλ νλ‘ν νμ
μ κΈ°λ°μΌλ‘ μμμ ꡬννλ€.
[[Prototype]]
λͺ¨λ κ°μ²΄κ° κ°μ§ λ΄λΆμ¬λ‘―
νλ‘ν νμ
κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€
__proto__
νλ‘νΌν°
Object.prototypeμ μ κ·Όμ νλ‘νΌν°
λͺ¨λ κ°μ²΄λ protoλ₯Όν΅ν΄ μμ μ νλ‘ν νμ
μ μ κ·Ό κ°λ₯νλ€.
- λͺ¨λ κ°μ²΄κ° κ°μ§κ³ μμ
- κ°μ²΄κ° μμ μ νλ‘ν νμ
μ κ°μ μ μΌλ‘ μ κ·ΌνκΈ° μν΄ μ¬μ©νλ κ²
λͺ¨λ κ°μ²΄λ μμμ ν΅ν΄__proto__
μ¬μ© κ°λ₯const obj = {} obj.__proto__
Object.prototype
λͺ¨λ κ°μ²΄λ νλ‘ν νμ
체μΈμ λ¬Άμ¬μλλ° JSμμ§μ κ°μ²΄μ νλ‘νΌν°μ μ κ·Όν λ ν΄λΉ κ°μ΄ μμΌλ©΄ __proto__
μ κ·Όμ νλ‘νΌν°κ° κ°λ¦¬ν€λ μ°Έμ‘°λ₯Ό λ°λΌ μμ μ λΆλͺ¨ μν μ νλ κ°μ²΄μ νλ‘ν νμ
μ νμνλ€.
νλ‘ν νμ κ°μ²΄
- λͺ¨λ κ°μ²΄κ° κ°μ§ κ²
- νμ κ°μ²΄μκ² μμ κ°μ²΄μ 곡μ νλ‘νΌν°(+λ©μλ) 곡μ
- μμμ κ°λ μ ꡬν
prototype νλ‘νΌν°
μμ±μ ν¨μμ μΈμ€ν΄μ€ νλ‘ν νμ μ κ°λ¦¬ν€λ κ²
- ν¨μ κ°μ²΄κ° κ°μ§κ³ μμ (μμ±μν¨μλ‘ λ§λ€μ΄ μ§μ§ μμ
νμ΄νν¨μ
,μΆμ½λ©μλ
λ μλ€) - μμ±μ ν¨μκ° μΈμ€ν΄μ€μ νλ‘ν νμ μ ν λΉνκΈ° μν΄ μ¬μ©
prototypeνλ‘νΌν°μ proto
//prototypeνλ‘νΌν° === __proto__μ κ·Όμ νλ‘νΌν°
foo.prototype === foo1.__proto__
νλ‘ν νμ 체μΈ
κ°μ²΄μ νλ‘νΌν°λ λ©μλμ μ κ·Όν λ μμΌλ©΄ νλ‘ν νμ 체μΈμ λ°λΌ νλ‘ν νμ μ νλ‘νΌν°μ λ©μλλ₯Ό μ°¨λ‘κ³ κ²μνκ² λλ€.
π κΆκΈνλ μ§λ¬Έλ€ μ 리
β 리ν°λ΄ λ°©μμ νλ‘ν νμ μ?
리ν°λ΄λ‘ μμ±λ κ°μ²΄λ νλ‘ν νμ μ μ‘΄μ¬, constructorνλ‘νΌν°κ° κ°λ¦¬ν€λ μμ±μ ν¨μ == κ°μ²΄λ₯Ό μμ±ν ν¨μ λΌκ³ ν μ μλ€. λ€λ§ κ²°λ‘ μ μΌλ‘ μμ±μ ν¨μλ‘ λ§λ€μ΄μ§ κ°μ²΄μ λμΌν μν μ νκΈ° λλ¬Έμ 리ν°λ΄ νκΈ°λ²μΌλ‘ μμ±λ κ°μ²΄λ€μ νλ‘ν νμ μ κ°κ°μ μμ±μ ν¨μλ₯Ό κ°λ¦¬ν¨λ€.
β νλ‘ν νμ 체μΈμ λκ°μ?
JSμμ§μ΄ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Ύμλ ν΄λΉ κ°μ²΄μ μ°Ύλ νλ‘νΌν°κ° μμΌλ©΄ μ κ·Όμ protoλ₯Ό λ°λΌμ λΆλͺ¨μ νλ‘ν νμ μ νλ‘νΌν°λ₯Ό μμ°¨μ μΌλ‘ κ²μνλ ꡬ쑰λ₯Ό λ§νλ€.
βνλ‘ν νμ λ΄λΆ μ¬λ‘―μ μ§μ μ κ·Όν μ μλ μ΄μ λ 무μμΈκ°μ?
νλ‘ν νμ 체μΈμ μνμ°Έμ‘°λ₯Ό λ§κΈ° μν΄μμΈλ°μ,
λ§μ½ μ§μ νλ‘ν νμ μ(λ΄λΆμ¬λ‘―μ )μ κ·Όνμ¬ μ€μ μ΄ κ°λ₯νλ€λ©΄ μνμ°Έμ‘°κ° μΌμ΄λ μ μκ³ κ·Έλ¬λ©΄ νλ‘ν νμ 체μΈμ λ°λΌ JS μμ§μ΄ νμν λ 무ν루νμ λΉ μ§ μ μκΈ° λλ¬Έμ protoμ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ μ κ·Όνμ¬ κ΅μ²΄νλλ‘ νλ κ²μ λλ€.
μ¬μ€ μ΄μ¨λ protoλ₯Ό μ§μ μ¬μ©νλ κ²μ κΆμ₯νμ§ μλλ°, λͺ¨λ κ°μ²΄κ° protoλ₯Ό μ¬μ©ν μ μμ§ μκΈ° λλ¬Έμ λλ€.
objλ νλ‘ν νμ
체μΈμ μ’
μ μ΄λ€. λ°λΌμ Object.__proto__λ₯Ό μμλ°μ μ μλ€.
const obj = Object.create(null)
ν€μλλ§ μ 리νμλ©΄,
ν¨μλ μΌκΈκ°μ²΄μ΄λ€
μΌκΈκ°μ²΄μ 쑰건
ν¨μμ 맀κ°λ³μ,λ°νκ° κ°λ₯, λ°νμμ μμ± κ°λ₯, λ³μμ μ μ₯ κ°λ₯
ν¨μν νλ‘κ·Έλλ°μ κ°λ₯νκ² νλ€.
μΌλ°κ°μ²΄μ λ€λ₯΄κ² ν¨μ κ³ μ μ νλ‘νΌν°λ₯Ό κ³ μ νλ€.
ν¨μκ°κ°μ§ κ³ μ μ νλ‘νΌν°
arguments: ν¨μ μΈμμ μ΄ν°λ΄ λ° μ μ¬λ°°μ΄κ°μ²΄
length: 맀κ°λ³μμ κ°μ
name: ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μ κ° (!=ν¨μ μ΄λ¦)
[[Prototype]]
λͺ¨λ κ°μ²΄κ° κ°μ§ λ΄λΆμ¬λ‘―
νλ‘ν νμ
κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€
protoλ νλ‘ν νμ
κ°μ²΄μ μ κ·ΌνκΈ° μν΄ μ¬μ©νλ μ κ·Όμ νλ‘νΌν°
prototype νλ‘νΌν°
μμ±μν¨μκ° κ°λ₯ν κ°μ²΄κ° μμ νλ νλ‘νΌν°
constructorλ§μ΄ μμ νλ νλ‘νΌν°
μμ¦ κΈμ velogμλ μ¬λ¦¬κ³ μλλ° κ°μ΄ μ¬λ €λμλ€. TamiμTILAND