π€ μμ§log π€
μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ³Έλ¬Έ
π£ Object μμ±μ ν¨μ
newμ°μ°μμ ν¨κ» Object μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ λΉ κ°μ²΄λ₯Ό μμ±νμ¬ λ°ννλ€. λΉ κ°μ²΄λ₯Ό μμ±ν μ΄ν νλ‘νΌν° λλ λ©μλλ₯Ό μΆκ°νμ¬ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
μμ±μ ν¨μλ new μ°μ°μμ ν¨κ» νΈμΆνμ¬ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μλ₯Ό λ§νλ€. μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄λ₯Ό μΈμ€ν΄μ€λΌ νλ€.
π£ μμ±μ ν¨μ
κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¬Έμ μ
κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ μ§κ΄μ μ΄κ³ κ°νΈνλ€. νμ§λ§ κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¨ νλμ κ°μ²΄λ§ μμ±νλ€. λ°λΌμ λμΌν νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±ν΄μΌ νλ κ²½μ° λ§€λ² κ°μ νλ‘νΌν°λ₯Ό κΈ°μ ν΄μΌ νκΈ° λλ¬Έμ λΉν¨μ¨μ μ΄λ€.
κ°μ²΄ 리ν°λ΄μ μν΄ κ°μ²΄λ₯Ό μμ±νλ κ²½μ° νλ‘νΌν° κ΅¬μ‘°κ° λμΌν¨μλ λΆκ΅¬νκ³ λ§€λ² κ°μ νλ‘νΌν°μ λ©μλλ₯Ό κΈ°μ ν΄μΌ νλ€. κ°μ²΄κ° νλ κ°λΌλ©΄ λμ΄κ°μλ μλλ§ λ§μ½ μμκ°μ κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ€λ©΄ λ¬Έμ κ° ν¬λ€.
μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ μ₯μ
μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ λ§μΉ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ μν ν νλ¦Ώ μ²λΌ μμ±μ ν¨μλ₯Ό μ¬μ©νμ¬ νλ‘νΌν° κ΅¬μ‘°κ° λμΌν κ°μ²΄ μ¬λ¬ κ°λ₯Ό κ°νΈνκ² μμ±ν μ μλ€.
π thisλ κ°μ²΄ μμ μ νλ‘νΌν°λ λ©μλλ₯Ό μ°Έμ‘°νκΈ° μν μκΈ° μ°Έμ‘° λ³μλ€. thisκ° κ°λ¦¬ν€λ κ°, this λ°μΈλ©μ ν¨μ νΈμΆ λ°©μμ λ°λΌ λμ μΌλ‘ κ²°μ λλ€.
μΌλ° ν¨μλ‘μ νΈμΆ β‘ μ μ κ°μ²΄
λ©μλλ‘μ νΈμΆ β‘ λ©μλλ₯Ό νΈμΆν κ°μ²΄ ( λ§μΉ¨ν μμ κ°μ²΄ )
μμ±μ ν¨μλ‘μ νΈμΆ β‘ μμ±μ ν¨μκ° ( λ―Έλμ ) μμ±ν μΈμ€ν΄μ€
μΌλ° ν¨μμ λμΌν λ°©λ²μΌλ‘ μμ±μ ν¨μλ₯Ό μ μνκ³ new μ°μ°μμ ν¨κ» νΈμΆνλ©΄ ν΄λΉ ν¨μλ μμ±μ ν¨μλ‘μ λμνλ€. λ§μ½ new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ₯Ό νΈμΆνμ§ μμΌλ©΄ μμ±μ ν¨μκ° μλλΌ μΌλ° ν¨μλ‘ λμνλ€.
μμ±μ ν¨μμ μΈμ€ν΄μ€ μμ± κ³Όμ
μμ±μ ν¨μμ μν μ νλ‘νΌν° κ΅¬μ‘°κ° λμΌν μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν ν νλ¦ΏμΌλ‘μ λμνμ¬ μΈμ€ν΄μ€λ₯Ό μμ±νλκ²μ μμ±λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν(μΈμ€ν΄μ€ νλ‘νΌν° μΆκ° λ° μ΄κΈ°κ° ν λΉ)νλ κ²μ΄λ€. μμ±μ ν¨μκ° μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²μ νμ μ΄κ³ , μμ±λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ κ²μ μ΅μ μ΄λ€.
μλ°μ€νΈλ¦½νΈ μμ§μ μ묡μ μΈ μ²λ¦¬λ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°ννλ€. newμ°μ°μμ ν¨κ» μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ λ€μκ³Ό κ°μ κ³Όμ μ κ±°μ³ μ묡μ μΌλ‘ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°νν ν μ묡μ μΌλ‘ μΈμ€ν΄μ€λ₯Ό λ°ννλ€.
1. μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ©
μ묡μ μΌλ‘ λΉ κ°μ²΄κ° μμ±λλ€. μ΄ λΉ κ°μ²΄κ° μμ±μ ν¨κ΅¬κ° μμ±ν μΈμ€ν΄μ€λ€. κ·Έλ¦¬κ³ μ묡μ μΌλ‘ μμ±λ λΉ κ°μ²΄, μ¦ μΈμ€ν΄μ€λ thisμ λ°μΈλ©λλ€. μμ±μ ν¨μ λ΄λΆμ thisκ° μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ΄μ κ° λ°λ‘ μ΄κ²μ΄λ€. μ΄ μ²λ¦¬λ ν¨μ λͺΈμ²΄μ μ½λκ° ν μ€μ© μ€νλλ λ°νμ μ΄μ μ μ€νλλ€.
2. μΈμ€ν΄μ€ μ΄κΈ°ν
μμ±μ ν¨μμ κΈ°μ λμ΄ μλ μ½λκ° ν μ€μ© μ€νλμ΄ thisμ λ°μΈλ© λμ΄ μλ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν νλ€. thisμ λ°μΈλ© λμ΄ μλ μΈμ€ν΄μ€μ νλ‘νΌν°λ λ©μλλ₯Ό μΆκ°νκ³ μμ±μ ν¨μκ° μΈμλ‘ μ λ¬λ°μ μ΄κΈ°κ°μ μΈμ€ν΄μ€ νλ‘νΌν°μ ν λΉνμ¬ μ΄κΈ°ν νκ±°λ κ³ μ κ°μ ν λΉ νλ€.
3. μΈμ€ν΄μ€ λ°ν
μμ±μ ν¨μ λ΄λΆμ λͺ¨λ μ²λ¦¬κ° λλλ©΄ μμ±λ μΈμ€ν΄μ€κ° λ°μΈλ©λ thisκ° μ묡μ μΌλ‘ λ°νλλ€.
λ§μ½ thisκ° μλ λ€λ₯Έ κ°μ²΄λ₯Ό λͺ
μμ μΌλ‘ λ°ννλ©΄ thisκ° λ°νλμ§ λͺ»νκ³ return λ¬Έμ λͺ
μν κ°μ²΄κ° λ°νλλ€. νμ§λ§ λͺ
μμ μΌλ‘ μμκ°μ λ°ννλ©΄ μμκ° λ°νμ 무μλκ³ μ묡μ μΌλ‘ thisκ° λ°νλλ€.
μ΄μ²λΌ μμ±μ ν¨μ λ΄λΆμμ λͺ
μμ μΌλ‘ thisκ° μλ λ€λ₯Έ κ°μ λ°ννλ κ²μ μμ±μ ν¨μμ κΈ°λ³Έ λμμ νΌμνλ€. λ°λΌμ ν¨μ λ΄λΆμμ returnλ¬Έμ λ°λμ μλ΅ν΄μΌ νλ€.
λ΄λΆ λ©μλ [[ Call ]] κ³Ό [[ Construct ]]
ν¨μ κ°μ²΄λ μΌλ° κ°μ²΄κ° κ°μ§κ³ μλ λ΄λΆμ¬λ‘―κ³Ό λ΄λΆ λ©μλλ λ¬Όλ‘ , ν¨μλ‘μ λμνκΈ° μν΄ ν¨μ κ°μ²΄λ§μ μν
[[ Environment ]], [[ FormalParameters ]] λ±μ λ΄λΆ μ¬λ‘―κ³Ό [[ Call ]], [[Construct]] κ°μ λ΄λΆ λ©μλλ₯Ό μΆκ°λ‘ κ°μ§κ³ μλ€.
ν¨μκ° μΌλ° ν¨μλ‘μ νΈμΆλλ©΄ ν¨μ κ°μ²΄μ λ΄λΆ λ©μλ [[Call]]μ΄ νΈμΆλκ³ newμ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘μ νΈμΆλλ©΄ [[ Construct ]]κ° νΈμΆλλ€.
Constructor κ³Ό non-constructorμ ꡬλΆ
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μλ₯Ό νκ°νμ¬ ν¨μ κ°μ²΄λ₯Ό μμ±ν λ ν¨μ μ μ λ°©μμ λ°λΌ ν¨μλ₯Ό Constructor κ³Ό non-constructorλ‘ κ΅¬λΆνλ€.
- Constructor : ν¨μ μ μΈλ¬Έ, ν¨μ ννμ, ν΄λμ€
- non-constructor : λ©μλ, νμ΄ν ν¨μ
new μ°μ°μ
μΌλ° ν¨μμ μμ±μ ν¨μμ νΉλ³ν νμμ μ°¨μ΄λ μλ€.
new μ°μ°μμ ν¨κ» ν¨μλ₯Ό νΈμΆνλ©΄ μμ±μ ν¨μλ‘ λμνλ€.
ν¨μ κ°μ²΄ μ λ΄λΆ λ©μλ [[ Call ]]μ΄ νΈμΆλλ κ²μ΄ μλλΌ [[ Construct ]]κ° νΈμΆλλ€.
λ¨, new μ°μ°μμ ν¨κ» νΈμΆνλ ν¨μλ non-constructorμ΄ μλ Constructor μ΄μ΄μΌ νλ€.μΌλ° ν¨μμ μμ±μ ν¨μμ νΉλ³ν νμμ μ°¨μ΄λ μμ§λ§ μμ±μ ν¨μλ μΌλ°μ μΌλ‘ 첫 λ¬Έμλ₯Ό λλ¬Έμλ‘ κΈ°μ ( νμ€μΉΌ μΌμ΄μ€ ) νμ¬ μΌλ° ν¨μμ ꡬλ³ν μ μλλ‘ ν΄μΌνλ€.
new.target
new.targetμ thisμ μ μ¬νκ² constructorμΈ λͺ¨λ ν¨μ λ΄λΆμμ μ묡μ μΈ μ§μ λ³μλ‘Έ κ°μ΄ μ¬μ©λλ©°, λ©ν νλ‘νΌν°λΌ λΆλ₯Έλ€.
ν¨μ λ΄λΆμμ new.targetμ μ¬μ©νλ©΄ new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘ νΈμΆλμλμ§ νμΈν μ μλ€.
new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ‘μ νΈμΆλλ©΄ ν¨μ λ΄λΆμ new.targetμ ν¨μ μμ μ κ°λ¦¬ν¨λ€. new μ°μ°μμμ΄ μΌλ° ν¨μλ‘μ νΈμΆλ λ΄λΆμ new.targetμ undefinedμ΄λ€.
λ°λΌμ ν¨μ λ΄λΆμμ new.targetμ μ¬μ©νμ¬ new μ°μ°μμ μμ±μ ν¨μλ‘μ νΈμΆνλμ§ νμΈνμ¬ κ·Έλ μ§ μμΌλ©΄ new μ°μ°μμ ν¨κ» μ¬κ· νΈμΆμ ν΅ν΄ μμ±μ ν¨μλ‘μ νΈμΆν μ μλ€.
π μ€μ½ν μΈμ΄ν μμ±μ ν¨ν΄
new.targetμ ES6μμ λμ
λ μ΅μ λ¬Έλ²μΌλ‘ IEμμλ μ§μνμ§ μλλ€. new.targetμ μ¬μ©ν μ μλ μν©μ΄λΌλ©΄ μ€μ½ν μΈμ΄ν μμ±μ ν¨ν΄μ μ¬μ©ν μ μλ€.
newμ°μ°μμ ν¨κ» μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄λ νλ‘ν νμ μ μν΄ μμ±μ ν¨μμ μ°κ²°λλ€. μ΄λ₯Ό μ΄μ©ν΄ new μ°μ°μμ ν¨κ» νΈμΆλμλμ§ νμΈν μ μλ€.
λλΆλΆμ λΉνΈμΈ μμ±μ ν¨μ ( Object, String, Number, Boolean, Function, Array, Date, RegExp, Promise λ± )λ new μ°μ°μμ ν¨κ» νΈμΆλμλμ§λ₯Ό νμΈν ν μ μ ν κ°μ λ°ν νλ€.
μλ₯Ό λ€μ΄, Object μ Function μμ±μ ν¨μλ new μ°μ°μ μμ΄ νΈμΆν΄λ new μ°μ°μμ ν¨κ» νΈμΆνμ λμ λμΌνκ² λμνλ€.
νμ§λ§ String, Number, Boolean μμ±μ ν¨μλ new μ°μ°μμ ν¨κ» νΈμΆνμλ String, Number, Boolean κ°μ²΄λ₯Ό μμ±νμ¬ λ°ννμ§λ§ new μ°μ°μ μμ΄ νΈμΆνλ©΄ λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ κ°μ λ°ννλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° νμ μ λ³ννκΈ°λ νλ€.
'π λͺ¨λJavascript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¨μμ μΌκΈ κ°μ²΄ (0) | 2022.09.28 |
---|---|
νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ (1) | 2022.09.28 |
μ€μ½ν (Scope) (0) | 2022.09.28 |
ν¨μ (0) | 2022.09.28 |
μμκ°κ³Ό κ°μ²΄ λΉκ΅ (0) | 2022.09.28 |