220812(κΈ)
πͺ΄ μ±μ₯μΌμ§
μ±
ν볡ν μ΄κΈ°μ£Όμμ(μ¨μΈ λ€μ΄μ΄)
μ λ΄μ©μ μκ·Ήλ°μ μμνλ μλ°ν μ±μ₯κΈ°λ‘
μ΄μμλ κ½κ³Ό μ£½μ κ½μ μ΄λ»κ² ꡬλ³νλκ°?
μ±μ₯νκ³ μλ κ²μ΄ μ΄μ μλ κ²μ΄λ€.
μλͺ μ μ μΌν μ¦κ±°λ μ±μ₯μ΄λ€!
π³ ν€μλ
μ΅λν κ°λ¨νκ² μ 리, μΆνμ 보면μ μ€μ€λ‘ μ€λͺ
βββ JavaScript
this
thisλ κΈ°λ³Έμ μΌλ‘ μ€ν 컨ν
μ€νΈκ° μμ±λ λ ν¨κ» κ²°μ (ThisBinding)
μ€ν 컨ν
μ€νΈκ° μμ±λλ 건 μΈμ ? -> ν¨μλ₯Ό νΈμΆ
ν λ
μ¦, thisλ ν¨μλ₯Ό νΈμΆ μ κ²°μ λ¨
μ μ곡κ°μμμ this -> window(μ μκ°μ²΄)
var a = 1; // window.a = 1μ κΈ°λ₯μ μννλ©΄μ λμμ μ°¨μ΄μ λ μ‘΄μ¬ 1. νΈμ΄μ€ν
μ 무, 2. configurable μ¬λΆ
window.a = 1;
- ν¨μλ‘ νΈμΆ μ this : μ μ κ°μ²΄(window)λ₯Ό κ°λ¦¬ν΄
- λ©μλλ‘ νΈμΆ μ this :
κ°μ²΄
.λ©μλμμκ°μ²΄
λ₯Ό κ°λ¦¬ν΄ - β λ©μλ λ΄μμμ ν¨μ νΈμΆ μ
var obj = {
method: function () {
console.log(this); // 1. this -> obj
// λ©μλ λ΄λΆμ ν¨μλ₯Ό νΈμΆ μ
var inner = function () {
console.log(this); // 2. this -> window : λ©μλ λ΄λΆμ¬λ κ²°κ΅ `ν¨μ νΈμΆ`μ΄κΈ° λλ¬Έ
}
inner();
function inner2 = () => {
console.log(this);
// 3. this -> obj : μμ 2λ²μ λͺ
λ°±ν μ€κ³μ μ€λ₯μ.
// μ΄λ₯Ό ν΄κ²°νκ³ μ νμ΄ν ν¨μλ₯Ό λμ
(μ€ν 컨ν
μ€νΈ νμ±ν μ Thisbindingμ΄ μΌμ΄λμ§μμ)
// λ°λΌμ μ€μ½ν체μ΄λμ²λΌ μμ°μ€λ½κ² λ΄λΆμ thisκ° μλ€λ©΄ κ·Έ μμ 컨ν
μ€νΈμμμ thisλ₯Ό μ°Έμ‘°
}
}
}
μ½λ°±ν¨μμμμ this : μ½λ°±ν¨μμ μ μ΄κΆμ κ°μ§λ ν¨μ λ§μ(κ·Έ ν¨μμ λ°λΌ μ κ°κ°)
μμ±μ ν¨μ λ΄λΆμμμ this : μλ°μ€ν¬λ¦½νΈλ ν¨μμκ² μμ±μλ‘μμ μν μ ν¨κ» λΆμ¬νλ€.
-> λͺ
μ¬ν κ²!
var Dog = function (name, age) {
this.name = name;
this.age = age;
};
var hodu = new Dog('hodu', 2); // thisκ° hodu μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΄
λͺ μμ μΌλ‘ thisλ₯Ό λ°μΈλ©νλ λ°©λ²(κ³ μλ‘ thisλ₯Ό λ°μΈλ©νκΈ°)
-
call λ©μλ
-
apply λ©μλ
μ΄λ€μ νμ©νλ λ°©λ²μ λ κΈ°μ΅ν΄λκΈ°!
μβ¦ thisλΌλ κ² μ΄λ κ² λ³΅μ‘νμ§ λͺ°λλλ°, μ€ν 컨ν μ€νΈλΆν° νλνλ ꡬ체μ μΌλ‘ μ κ·ΌνλκΉ μκ°λ³΄λ€ μ¬λ―Έμκ³ μ΄λ ΅μ§ μλ€.