-> μμ±μ ν¨μλ₯Ό μ¬μ©ν΄ κ°μ²΄λ₯Ό μμ±νλ λ°©μμ μμλ³Έλ€.
π» 17.1 Object μμ±μ ν¨μ
new μ°μ°μμ ν¨κ» Obj μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ λΉ κ°μ²΄λ₯Ό μμ±, λ°ννλ€.
μ΄νμ νλ‘νΌν°, λ©μλλ₯Ό μΆκ°ν΄μ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
μμ±μ ν¨μ
: new μ°μ°μμ ν¨κ» νΈμΆν΄ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μ.
μΈμ€ν΄μ€
: μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄
const person = new Object();
person.name = 'Lee';
person.sayHello = function () { console.log("Hello" + this.name) };
JS λ Object μμ±μ ν¨μ μΈμ String, Number, ... λ±λ± μ λΉνΈμΈ μμ±μ ν¨μλ₯Ό μ 곡νλ€.
π» 17.2 μμ±μ ν¨μ
17.2.1 κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¬Έμ μ
κ°μ²΄ 리ν°λ΄λ‘ μμ±νλ λ°©μμ μ§κ΄μ , κ°νΈνμ§λ§,
λ¨ νλμ κ°μ²΄λ§ μμ±ν¨.
-> λμΌν νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ₯Ό μ¬λ¬κ° μμ±νλ κ²½μ° λΉν¨μ¨μ
17.2.2 μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ μ₯μ
μμ±μ ν¨μλ₯Ό μ¬μ©νλ©΄, κ°μ²΄λ₯Ό μμ±νκΈ° μν ν νλ¦Ώ(ν΄λμ€)μ²λΌ
νλ‘νΌν° κ΅¬μ‘°κ° λμΌν κ°μ²΄λ₯Ό μ¬λ¬κ° λ§λ€ μ μλ€.
function Animal(name) {
this.name = name;
this.eating = function () {
console.log(this.name + 'is eating')
}
}
const dog = new Animal('dog');
const cat = new Animal('cat');
π this
: ν¨μ νΈμΆ λ°©μμ λ°λΌ λμ μΌλ‘ κ²°μ λ¨.
- μΌλ° ν¨μλ‘μ : μ μ κ°μ²΄
- λ©μλλ‘μ : λ©μλλ₯Ό νΈμΆν κ°μ²΄
- μμ±μ ν¨μλ‘μ : μμ±μ ν¨μκ° (λ―Έλμ) μμ±ν μΈμ€ν΄μ€
μμ±μ ν¨μ : κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±νλ ν¨μ
μΌλ° ν¨μμ²λΌ function μ μ΄μ©ν΄ μ μ,
new μ°μ°μμ ν¨κ» νΈμΆνλ©΄ ν΄λΉ ν¨μλ μμ±μ ν¨μλ‘ λμν¨.
17.2.3 μμ±μ ν¨μμ μΈμ€ν΄μ€ μμ± κ³Όμ
μμ±μ ν¨μμ μν :
νλ‘νΌν°κ° λμΌν μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν ν νλ¦ΏμΌλ‘ λμ
=> μΈμ€ν΄μ€λ₯Ό μμ± (νμ)
=> μμ±λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν (μΈμ€ν΄μ€ νλ‘νΌν° μΆκ° λ° μ΄κΈ°κ° ν λΉ) (μ΅μ )
this λ‘ νλ‘νΌν° μΆκ°νκ³ μ΄κΈ°ννμ§λ§, μμ±νκ³ λ°ννλ μ½λκ° μμ.
=> JS μμ§μ΄ μ묡μ μΈ μ²λ¦¬λ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°ννκΈ° λλ¬Έ.
π μ묡μ μΈ μ²λ¦¬ κ³Όμ
1. μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ© (μλ³μμ κ°μ μ°κ²°)
- μ묡μ μΌλ‘ λΉ κ°μ²΄ μμ±
- ν¨μ λͺΈμ²΄μ μ½λκ° ν μ€ μ© μ€νλλ λ°νμ μ΄μ μ μ€νλ¨.
2. μΈμ€ν΄μ€ μ΄κΈ°ν
- this μ λ°μΈλ©λμ΄ μλ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν
- thisμ λ°μΈλ© λμ΄μλ μΈμ€ν΄μ€μ νλ‘νΌν°λ λ©μλ μΆκ°
- μμ±μ ν¨μκ° μΈμλ‘ μ λ¬λ°μ μ΄κΈ°κ°μ ν λΉ
(κ°λ°μκ° κΈ°μ ν λλ‘)
3. μΈμ€ν΄μ€ λ°ν
λͺ¨λ μ²λ¦¬κ° λλλ©΄ μμ±λ μΈμ€ν΄μ€κ° λ°μΈλ© λ this λ₯Ό μ묡μ μΌλ‘ λ°ννλ€.
Circle {radius: 1, getDiameter: f}
return
- λ€λ₯Έ κ°μ²΄ λͺ μμ λ°ν : this λμ λͺ μν κ°μ²΄ λ°ν
- λ€λ₯Έ μμκ° λͺ μμ λ°ν : 무μλκ³ this κ° λ°ν
17.2.4 λ΄λΆ λ©μλ [[Call]] κ³Ό [[Construct]]
ν¨μ μ μΈλ¬Έ, ν¨μ ννμμΌλ‘ μ μν ν¨μ -> μΌλ°μ ν¨μ νΉμ μμ±μ ν¨μ λ λ€ λ μ μμ.
μμ±μ ν¨μλ‘μ νΈμΆνλ€λ κ²: new μ°μ°μμ ν¨κ» νΈμΆ & κ°μ²΄λ₯Ό μμ±νλ κ²μ μλ―Έ
ν¨μλ κ°μ²΄
-> μΌλ° κ°μ²΄μ λμΌνκ² λμ
μΌλ° κ°μ²΄μ ν¨μκ° λ€λ₯Έ μ
μΌλ° κ°μ²΄ : νΈμΆν μ μμ.
ν¨μ : μΌλ° κ°μ²΄κ° κ°μ§ λ΄λΆ μ¬λ‘―, λ΄λΆ λ©μλ + ν¨μλ‘μ λμνκΈ° μν λ΄λΆ μ¬λ‘―, λ©μλλ κ°μ§κ³ μμ.
callable : λ΄λΆ λ©μλ [[Call]] μ κ°λ ν¨μ κ°μ²΄ :: νΈμΆ κ°λ₯ν μΌλ° ν¨μ
constructor : λ΄λΆ λ©μλ [[Construct]] λ₯Ό κ°λ ν¨μ κ°μ²΄ :: μμ±μ ν¨μλ‘μ νΈμΆν μ μλ ν¨μ
non-constructor : μκ²λ μλ μ :: μμ±μ ν¨μλ‘ νΈμΆ ν μ μλ ν¨μ
νΈμΆ ν μ μλ ν¨μ : ν¨μ κ°μ²΄κ° μλ. -> ν¨μ κ°μ²΄λ λ°λμ callable
λͺ¨λ ν¨μ κ°μ²΄ : λ΄λΆ λ©μλ [[Call]] μ κ°κ³ μμ. νμ§λ§ [[Construct]] λ₯Ό κ°λ 건 μλ.
17.2.5 construct μ non-constructor μ ꡬλΆ
π ν¨μ μ μ λ°©μμ λ°λΌ ꡬλΆ
constructor
- ν¨μ μ μΈλ¬Έ, ν¨μ ννμ, ν΄λμ€
non-constructor
- λ©μλ(ES6 λ©μλ μΆμ½ νν), νμ΄ν ν¨μ
μμ±μ ν¨μκ° μλ μΌλ° ν¨μ(callable && construct) μ new μ°μ°μλ₯Ό λΆμ΄λ©΄ μμ±μ ν¨μμ²λΌ λμν μλ μμΌλ μ£Όμ.
17.2.6 new μ°μ°μ
μΌλ° ν¨μ vs μμ±μ ν¨μ -> νμμ μΈ μ°¨μ΄ μμ.
λ¨, new μ°μ°μμ ν¨κ» νΈμΆνλ ν¨μλ constructor μ¬μΌ ν¨.
λ°λλ‘ μμ±μ ν¨μλ₯Ό new μμ΄ νΈμΆνλ©΄ μΌλ° ν¨μλ‘ νΈμΆλ¨.
17.2.7 new.target
μμ±μ ν¨μκ° new μ°μ°μ μμ΄ νΈμΆλλ κ²μ λ°©μ§νκΈ° μν΄ ES6μμ μ¬μ©.
this μ μ μ¬.
- constructor μΈ λͺ¨λ ν¨μ λ΄λΆμμ μ묡μ μΈ μ§μλ³μμ κ°μ΄ μ¬μ©λ¨.
- λ©ν νλ‘νΌν°λΌκ³ λΆλ¦.
new.target :
new μ°μ°μμ ν¨κ» νΈμΆ -> ν¨μ μμ μ κ°λ¦¬ν΄
new μμΌλ©΄ -> undefined
π μ€μ½ν μΈμ΄ν μμ±μ ν¨ν΄
new.target μ¬μ©ν μ μλ μν©μμ μ¬μ©ν μ μλ ν¨ν΄
(new μ ν¨κ» νΈμΆλμΌλ©΄ -> new Circle λ°ννλ λ°©μ)
'λ μ λͺ©λ‘ > λͺ¨λ₯λ€ Modern JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ₯λ€] λ²μΈ ) μ°λ¦¬λ μ νλ‘ν νμ μ λν΄μ μμμΌν κΉ? (0) | 2023.05.10 |
---|---|
[λͺ¨λ₯λ€] 18μ₯ ν¨μμ μΌκΈ κ°μ²΄ (0) | 2023.05.10 |
[λͺ¨λ₯λ€] 16μ₯ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ (0) | 2023.05.08 |
[λͺ¨λ₯λ€] 15μ₯ let, const ν€μλμ λΈλ‘ λ 벨 μ€μ½ν (0) | 2023.05.08 |
[λͺ¨λ₯λ€] 14μ₯ μ μ λ³μμ λ¬Έμ μ (0) | 2023.05.06 |