JavaScript - this(1)
JavaScript - this
μν©μ λ°λΌ λ¬λΌμ§λ this
- μλ°μ€ν¬λ¦½νΈμμ
this
λ κΈ°λ³Έμ μΌλ‘ μ€ν 컨ν μ€νΈκ° μμ±λ λ ν¨κ» κ²°μ => μ¦,this
λ ν¨μλ₯Ό νΈμΆν λ κ²°μ λλ€ - ν¨μλ₯Ό μ΄λ€ λ°©μμΌλ‘ νΈμΆνλλμ λ°λΌ κ°μ΄ λ¬λΌμ§λ€.
μ μ 곡κ°μμμ this
- μ μ 곡κ°μμ
this
λ βμ μ κ°μ²΄βλ₯Ό κ°λ¦¬ν΄ - μ μ 컨ν μ€νΈλ₯Ό μμ±νλ 주체 -> μ μκ°μ²΄μ΄κΈ° λλ¬Έ
- μ μ κ°μ²΄λ μλ°μ€ν¬λ¦½νΈ λ°νμ νκ²½μ λ°λΌ λ€λ₯Έ μ΄λ¦κ³Ό μ 보
- λΈλΌμ°μ νκ²½ : window
- Node.js νκ²½ : global
μ μλ³μμ μ μκ°μ²΄
var a = 1;
console.log(a);
console.log(window.a);
console.log(this.a);
μ μ곡κ°μμ μ μΈν λ³μ aμ 1μ ν λΉνμ λΏμΈλ° window.aμ this.aκ° λμΌνκ² 1μ΄ μΆλ ₯λλ€. ππ» κ·Έ μ΄μ λ, μλ°μ€ν¬λ¦½νΈμ λͺ¨λ λ³μλ μ€μ νΉμ κ°μ²΄μ νλ‘νΌν°λ‘μ λμνκΈ° λλ¬Έ
- μ¬μ©μκ° var μ°μ°μλ₯Ό μ΄μ©ν΄ λ³μλ₯Ό μ μΈνλλΌλ μ€μ μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄λ€ νΉμ κ°μ²΄μ νλ‘νΌν°λ‘ μΈμ(νΉμ κ°μ²΄λ? μ€ν 컨ν μ€νΈμ LexicalEnvironment)
- μ€ν 컨ν μ€νΈλ λ³μλ₯Ό μμ§νμ¬ L.Eμ νλ‘νΌν°λ‘ μ μ₯
- μ μ 컨ν μ€νΈμ κ²½μ°, L.Eλ μ μκ°μ²΄ κ·Έλλ‘ μ°Έμ‘°( = GlobalEnvκ° μ μ κ°μ²΄ μ°Έμ‘° / μ μ 컨ν μ€νΈμ L.Eκ° GlobalEnv μ°Έμ‘°)
π₯ βμ μλ³μλ₯Ό μ μΈνλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄λ₯Ό μ μκ°μ²΄μ νλ‘νΌλ¦¬λ‘ ν λΉνλ€β
μ μ곡κ°μμλ varλ‘ λ³μλ₯Ό μ μΈνλ λμ windowμ νλ‘νΌν°μ μ§μ ν λΉ
νλλΌλ κ²°κ³Όμ μΌλ‘λ varλ‘ μ μΈν κ²λ λκ°μ΄ λμν κ²
μ΄λΌλ μμ κ°λ₯
var a = 1;
window.b = 2;
console.log(a, window.a, this.a);
console.log(b, window.b, this.b);
window.a = 3;
b = 4;
console.log(a, window.a, this.a);
console.log(b, window.b, this.b);
μ μλ³μ μ μΈκ³Ό μ μκ°μ²΄μ νλ‘νΌν° ν λΉ μ¬μ΄μ μ ν λ€λ₯Έ κ²½μ° β‘οΈ μμ
λͺ
λ Ή
- μ μ κ°μ²΄λ delete λͺ
λ Ήμ΄ λΆκ°λ₯νκ³ , μ μ κ°μ²΄μ νλ‘νΌν°λ delete λͺ
λ Ή λμ
- μ΄λ μ¬μ©μκ° μλμΉ μκ² μμ νλ κ²μ λ°©μ§νλ μ°¨μμμ λ§λ ¨ν λλ¦μ λ°©μ΄ μ λ΅ ν΄μ
λ©μλλ‘μ νΈμΆν λ κ·Έ λ©μλ λ΄λΆμμμ this
ν¨μ vs λ©μλ
- ν¨μ
- κ·Έ μμ²΄λ‘ λ 립μ μΈ κΈ°λ₯μ μν
- μ (.)μ΄λ λκ΄νΈκ°μ κ² β
- λ©μλ
- μμ μ νΈμΆν λμ κ°μ²΄μ κ΄ν λμ μν
- μ (.)μ΄λ λκ΄νΈκ°μ κ² βοΈ
λ©μλ λ΄λΆμμμ this
- μ΄λ€ ν¨μλ₯Ό λ©μλλ‘μ νΈμΆνλ κ²½μ°, νΈμΆ 주체λ λ°λ‘
ν¨μλͺ (νλ‘νΌν°λͺ ) μμ κ°μ²΄
- μ νκΈ°λ²μ κ²½μ°,
λ§μ§λ§ μ μμ λͺ μλ κ°μ²΄κ° 곧 this
ν¨μλ‘μ νΈμΆν λ κ·Έ ν¨μ λ΄λΆμμμ this
ν¨μ λ΄λΆμμμ this
- μ΄λ€ ν¨μλ₯Ό ν¨μλ‘μ νΈμΆν κ²½μ°μλ this μ§μ β
- ν¨μμμμ thisλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
λ©μλμ λ΄λΆν¨μμμμ this
μ λ΅ β‘οΈ (1):obj1, (2):μ μκ°μ²΄(window), (3):obj2
1 var obj1 = {
2 outer:function() {
3 console.log(this); //(1)
4 var innerFunc = function () {
5 console.log(this); //(2) (3)
6 }
7 innerFunc();
8
9 var obj2 = {
10 innerMethod : innerFunc
11 };
12 obj2.innerMethod();
13 }
14 };
15 obj1.outer();
2οΈβ£ λ²μ€
- obj1.outerν¨μμ μ€ν 컨ν
μ€νΈ μμ± λ° νΈμ΄μ€ν
, μ€μ½ν μ²΄μΈ μ 보μμ§,
this
λ°μΈλ© - ν¨μλ₯Ό νΈμΆν λ ν¨μλͺ
μΈ outer μμ μ (.)μ΄ μμμΌλ―λ‘,
λ©μλ
λ‘μμ νΈμΆ β‘οΈλ§μ§λ§ μ μμ κ°μ²΄μΈ obj1 λ°μΈλ©
4οΈβ£ λ²μ€
- innerFunc ν¨μμ μ€ν 컨ν μ€νΈ μμ± λ° νΈμ΄μ€ν , μ€μ½ν μ²΄μΈ μμ§, this λ°μΈλ© λ± μν
- ν¨μλ₯Ό νΈμΆν λ, μ (.) β
- ν¨μλ‘μ νΈμΆν κ²μ΄λ―λ‘, thisκ° μ§μ β β‘οΈ μλμΌλ‘ μ€μ½ν 체μΈμμ μ΅μμ κ°μ²΄μΈ
μ μκ°μ²΄(window) λ°μΈλ©
9οΈβ£ λ²μ€
- obj2.innerMethod ν¨μμ μ€ν 컨ν μ€νΈ μμ±
- ν¨μλ₯Ό νΈμΆν λ ν¨μλͺ
μΈ innerMethod μμ μ (.)μ΄ μμμΌλ―λ‘
λ©μλ
λ‘μμ νΈμΆ β‘οΈλ§μ§λ§ μ μμ κ°μ²΄μΈ obj2 λ°μΈλ©
π₯ μ€μ§ ν΄λΉ ν¨μλ₯Ό νΈμΆνλ ꡬ문 μμ μ λλ λκ΄νΈ νκΈ°κ° μλμ§ μλμ§κ° κ΄κ±΄
λ©μλμ λ΄λΆ ν¨μμμμ thisλ₯Ό μ°ννλ λ°©λ²
β¨ λ³μλ₯Ό νμ©νλ κ²
var obj = {
outer: function () {
console.log(this); // (1) {outer: f}
var innerFunc1 = function () {
console.log(this); // (2) window{ ... }
};
innerFunc1();
// μ¬κΈ°μ thisλ₯Ό λ³μμ ν λΉ
var self = this;
var innerFunc2 = function () {
console.log(self); // (3) {outer: f}
};
innerFunc2();
},
};
obj.outer();
thisλ₯Ό λ°μΈλ© νμ§ μλ ν¨μ
- ν¨μ λ΄λΆμμ thisκ° μ μκ°μ²΄λ₯Ό λ°λΌλ³΄λλ λ¬Έμ λ₯Ό 보μνκ³ μ, thisλ₯Ό λ°μΈλ© νμ§μλ
νμ΄νν¨μ(arrow function)
λμ (ES6) - νμ΄νν¨μ(arrow function)λ μ€ν 컨ν
μ€νΈλ₯Ό μμ±ν λ this λ°μΈλ© κ³Όμ μμ²΄κ° λΉ μ§κ² λμ΄,
μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ νμ© κ°λ₯
var obj = {
outer: function () {
console.log(this);
var innerFunc = () => {
console.log(this);
};
innerFunc();
},
};
obj.outer();
μ½λ°± ν¨μ νΈμΆ μ κ·Έ ν¨μ λ΄λΆμμμ this
- ν¨μ Aμ μ μ΄κΆμ λ€λ₯Έ ν¨μ(λλ λ©μλ) Bμκ² λ겨주λ κ²½μ° ν¨μ Aλ₯Ό
μ½λ°±ν¨μ
- ν¨μ Aλ ν¨μ Bμ λ΄λΆ λ‘μ§μ λ°λΌ μ€ν
- this μμ ν¨μ B λ΄λΆ λ‘μ§μμ μ ν κ·μΉμ λ°λΌ κ° κ²°μ
- μ μ΄κΆμ λ°μ ν¨μμμ μ½λ°± ν¨μμ λ³λλ‘
thisκ° λ λμμ μ§μ ν κ²½μ° κ·Έ λμμ μ°Έμ‘°
μμ±μ ν¨μ λ΄λΆμμμ this
μμ±μ ν¨μ
: μ΄λ€ 곡ν΅λ μ±μ§μ μ§λλ κ°μ²΄λ€μ μμ±νλλ° μ¬μ©νλ ν¨μ- μμ±μ : νλ‘κ·Έλλ°μ μΌλ‘ ꡬ체μ μΈ μΈμ€ν΄μ€λ₯Ό λ§λ€κΈ° μν μΌμ’ μ ν
- μλ°μ€ν¬λ¦½νΈλ ν¨μμ μμ±μλ‘μμ μν μ ν¨κ» λΆμ¬
- new λͺ λ Ήμ΄μ ν¨κ» ν¨μλ₯Ό νΈμΆνλ©΄ ν΄λΉ ν¨μκ° μμ±μλ‘μ λμ
- μ΄λ€ ν¨μκ° μμ±μ ν¨μλ‘μ νΈμΆλ κ²½μ° λ΄λΆμμμ thisλ
곧 μλ‘ λ§λ€ κ΅μ²΄μ μΈ μΈμ€ν΄μ€ μμ
var Cat = function (name, age) {
this.bark = "μΌμΉ";
this.name = name;
this.age = age;
};
var choco = new Cat("μ΄μ½", 7);
var nabi = new Cat("λλΉ", 5);
console.log(choco, nabi);
μ°Έκ³ : μ½μ΄ μλ°μ€ν¬λ¦½νΈ(Core JavaScript), μ μ¬λ¨