Index
Index7. this7.1 this λ? 7.2 this μ νΉμ§ 7.3 this κ°μ μ¬μ©μμ μλλλ‘ μ‘°μνκΈ°
Β
7. this
7.1 this λ?
- μμ μ νΈμΆν κ°μ²΄
- μμ μ΄ μμ±ν κ°μ²΄
thisλ μ΄ λ κ²½μ°μμ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μκΈ° μ°Έμ‘° λ³μμ
λλ€. μλ μμ μμ thisλ windowμ
λλ€.
function a(){ console.log(this) } a();
let myObj = { val1: 100, func1: function () { console.log(this); } } myObj.func1();
μλ₯Ό λ€μ΄λ³΄λλ‘ νκ² μ΅λλ€. λͺ¨λ ν¨μλ μ€νν λλ§λ€ this λΌλ κ°μ²΄κ° μΆκ°λ©λλ€. thisλ ν¨μκ° μ€νλ λ ν¨μλ₯Ό μμ νκ³ μλ κ°μ²΄λ₯Ό μ°Έμ‘°ν©λλ€.
/ * this */ function sayName(){ console.log(this.name); } var name = 'Hero'; // μ μμΌλ‘ μ μΈν name λ³μμ μμλ window κ° μλ΅λμ΄ μμ΅λλ€. // λλ¬Έμ window.name === "Hero" κ° μ±λ¦½ν©λλ€. let peter = { name : 'Peter Parker', sayName : sayName } let bruce = { name : 'Bruce Wayne', sayName : sayName } sayName(); peter.sayName(); bruce.sayName(); /* sayName() ν¨μλ₯Ό μ€ννμ λμ peter, bruce κ°μ²΄μ sayName ν¨μλ₯Ό νΈμΆνμ λμ κ²°κ³Όλ₯Ό λΉκ΅ν΄ 보μΈμ */
/* this μ¬μ© μμ */ let νΈν = [{ 'μ΄λ¦' : 'νλνΈν ', 'μμΉ' : 'μ μ£Όλ μ μ£Όμ 001', 'κ°κ²©' : {'A':50000, 'B':30000, 'C':15000}, 'λ°©μκ°μ' : 50, 'μμ½μμ' : 25, 'λ¨μλ°©μκ°μ' : function(){return this.λ°©μκ°μ - this.μμ½μμ} },{ 'μ΄λ¦' : 'λνΈν ', 'μμΉ' : 'μ μ£Όλ μ μ£Όμ 002', 'κ°κ²©' : {'A':100000, 'B':60000, 'C':30000}, 'λ°©μκ°μ' : 100, 'μμ½μμ' : 30, 'λ¨μλ°©μκ°μ' : function(){return this.λ°©μκ°μ - this.μμ½μμ} },{ 'μ΄λ¦' : 'μ νΈν ', 'μμΉ' : 'μ μ£Όλ μ μ£Όμ 003', 'κ°κ²©' : {'A':80000, 'B':50000, 'C':30000}, 'λ°©μκ°μ' : 120, 'μμ½μμ' : 80, 'λ¨μλ°©μκ°μ' : function(){return this.λ°©μκ°μ - this.μμ½μμ} }]; console.log(νΈν [0].λ¨μλ°©μκ°μ()); console.log(νΈν [1].λ¨μλ°©μκ°μ()); console.log(νΈν [2].λ¨μλ°©μκ°μ());
Β
Β
7.2 this μ νΉμ§
thisλ ν¨μκ° λ§λ€μ΄μ§ λκ° μλ 'μ€ν'λ λ κ·Έ κ°μ΄ κ²°μ λ©λλ€.
function sayName(){ console.log(this.name); } var name = 'Hero'; let peter = { name : 'Peter Parker', sayName : sayName }; let bruce = { name : 'Bruce Wayne', sayName : peter.sayName }; bruce.sayName();
Β
7.3 this κ°μ μ¬μ©μμ μλλλ‘ μ‘°μνκΈ°
ν¨μμ apply(), call(), bind() λ©μλλ₯Ό μ¬μ©νλ©΄ thisλ₯Ό μ‘°μνκ±°λ κ³ μ ν΄ λ μ μμ΅λλ€.
μ΄λ μ¬μ©μκ° μνλ μλλλ‘ bindingμ ν΅ν 컨νΈλ‘€μ ν μ μκ² ν©λλ€.
Β
7.3.1 call()
call() λ©μλμ μΈμμ this λ‘ μ¬μ©ν κ°μ μ λ¬ν μ μμ΅λλ€.
var peter = { name : 'Peter Parker', sayName : function(){ console.log(this.name); } } var bruce = { name : 'Bruce Wayne', } peter.sayName.call(bruce); // peter.sayName.call(bruce) μ κ²°κ³Όλ 무μμ΄ λ μ§ μκ°ν΄ λ΄ μλ€.
Β
7.3.2 apply()
apply() λ©μλμ μΈμμ this λ‘ μ¬μ©ν κ°μ μ λ¬ν μ μμΌλ©°, λ°°μ΄μ ννλ‘λ μ λ¬ν μ μμ΅λλ€.
var peter = { name : 'Peter Parker', sayName : function(is, is2){ console.log(this.name+ ' is '+ is + ' or ' + is2); } } var bruce = { name : 'Bruce Wayne', } peter.sayName.apply(bruce, ['batman', 'richman']); /* peter.sayName.apply(bruce, ['batman', 'richman']) μ κ²°κ³Όκ° λ¬΄μμ΄ λ μ§ μκ°ν΄λ³΄κ³ apply λ₯Ό callλ‘ λ°κΎΈμ΄ νΈμΆνμ λμ λΉκ΅ν΄ λ΄ μλ€. */
Β
7.3.3 bind()
bind() λ thisκ° κ³ μ λ μλ‘μ΄ ν¨μλ₯Ό λ°νν©λλ€.
function sayName(){ console.log(this.name); } var bruce = { name: 'bruce', sayName : sayName } var peter = { name : 'peter', sayName : sayName.bind(bruce) } peter.sayName(); bruce.sayName(); /* peter.sayName() κ³Ό bruce.sayName() μ κ²°κ³Ό κ°μ΄ 무μμ΄ λ μ§ μκ°ν΄λ΄ μλ€. */
Β
Β
λ€μκ³Ό κ°μ΄ μ½λ°±μ thisκ° μ μμ λ°λΌλ³΄κ³ μμ§ μμ κ²½μ°λ μμ΅λλ€.
[1, 2, 3].forEach(function(){console.log(this)}, [10, 20, 30])