JavaScript์์ this๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ ์ ํด์ ธ ์์ง ์์ผ๋ฉฐ, ํธ์ถ๋ ๋ ๊ฒฐ์ ๋๋ค.
์๋์ฒ๋ผ ๋ค์ํ ์ํฉ์์ this๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋์ง ์์๋ณด์.
(ํ์ดํํจ์์์์ this๋ ๋ค์ ๊ธ์์ ์ ๋ฆฌํ๋ค.)
๋ชฉ์ฐจ
- ์ ์ญ ์ปจํ ์คํธ (Global scope) & ํจ์ ํธ์ถ
- ๊ฐ์ฒด์ ์ํ ๋ฉ์๋ ํธ์ถ
- ๊ฐ์ฒด์ ์ํ ๋ฉ์๋์ ๋ด๋ถ ํจ์ ํธ์ถ
- ํจ์๋ฅผ ๋ฉ์๋๋ก ํธ์ถ (call, apply, bind)
- ์์ฑ์ ํจ์ ํธ์ถ
- ํด๋์ค
- ์ด๋ฒคํธ ํธ๋ค๋ฌ
- "use strict" ๋ชจ๋
1. ์ ์ญ ์ปจํ ์คํธ (Global scope) & ํจ์ ํธ์ถ
this = ์ ์ญ ๊ฐ์ฒด
(๋ธ๋ผ์ฐ์ ์์๋ window)
console.log(this); // ์ ์ญ ๊ฐ์ฒด (๋ธ๋ผ์ฐ์ ์์๋ window)
function myFunction() {
console.log(this);
}
myFunction(); // ์ ์ญ ๊ฐ์ฒด (๋ธ๋ผ์ฐ์ ์์๋ window)
2. ๊ฐ์ฒด์ ์ํ ๋ฉ์๋ ํธ์ถ
this = ๋ฉ์๋๊ฐ ์ํ ๊ฐ์ฒด
const obj = {
method: function() {
console.log(this);
}
};
obj.method(); // obj ๊ฐ์ฒด
3. ๊ฐ์ฒด์ ์ํ ๋ฉ์๋์ ๋ด๋ถํจ์ ํธ์ถ
this = ์ ์ญ ๊ฐ์ฒด
(๋ด๋ถ ํจ์์์๋ ๋ฉ์๋์ this์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด, ์ฃผ์ ํ์)
์ ์ญ ์ค์ฝํ์์ ์คํ๋๋ฉฐ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ this๋ ์ ์ญ๊ฐ์ฒด๊ฐ ๋๋ค.
const obj = {
outerMethod: function() {
const innerMethod = function() {
console.log(this); // ์ ์ญ ๊ฐ์ฒด (๋ธ๋ผ์ฐ์ ์์๋ window)
};
innerMethod();
}
};
obj.outerMethod();
4. ํจ์๋ฅผ ๋ฉ์๋๋ก ํธ์ถ (call, apply, bind)
this = ๋งค๊ฐ๋ณ์๋ก ๋๊ธด ๊ฐ์ฒด
function greet() {
console.log(`Hello, ${this.name}`);
}
const person = { name: 'Alice' };
greet.call(person); // Hello, Alice
greet.apply(person); // Hello, Alice
const greetPerson = greet.bind(person);
greetPerson(); // Hello, Alice
5. ์์ฑ์ ํจ์ ํธ์ถ
this = ์์ฑ์๋ก ์์ฑ๋ ์๋ก์ด ๊ฐ์ฒด
function MyClass() {
console.log(this);
}
const instance = new MyClass(); // MyClass ์ธ์คํด์ค
6. ํด๋์ค
this = ํด๋์ค์ ์ธ์คํด์ค
(ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด)
class Dog {
constructor(name) {
this.name = name;
}
bark() {
console.log(`${this.name} is barking`);
}
}
const dog = new Dog('Buddy');
dog.bark(); // Buddy is barking
7. ์ด๋ฒคํธ ํธ๋ค๋ฌ
this = ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ DOM ์์
(currentTarget๊ณผ ๋์ผ)
const button = document.querySelector('button');
button.addEventListener('click', function() {
console.log(this); // <button id="button">๋ฒํผ</button>
console.log(e.currentTarget); // ์์ ๋์ผ
});
8. use strict ๋ชจ๋
this = ํจ์ ๋ด๋ถ์์ "use strict" ๋ชจ๋ ์ฌ์ฉ ์, this๊ฐ undefined๋ก ์ค์ ๋จ
(์๋ ์ ์ญ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ)
"use strict";
function strictModeFunction() {
console.log(this); // undefined
}
strictModeFunction();
์ถ์ฒ : MDN, https://sangjuntech.tistory.com/24, ZeroCho, chatGPT
'๐จ JavaScript > ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript ์ ๋ฆฌ : this (2) ํ์ดํํจ์์์์ this (0) | 2023.08.17 |
---|