let's get IT with DAVINA ๐ป
This ๋ณธ๋ฌธ
JS์์ this๋ ์ ์ด๋ ค์ธ๊น?
๋ค๋ฅธ ์ธ์ด๋ค์์ this๋ ๋ง๋ค์ด์ง ๊ฐ์ฒด ์๊ธฐ ์์ ์ ๋ปํ์ง๋ง, JS์์ ๋ค๋ฅด๋ค!
JS์์ this๋ ์์ ๋จํ ์ง๋๋ค!! ๋๊ฐ ํธ์ถํ๋์ ๋ฐ๋ผ ๋๊ตฌ์ ์ง๋์ธ์ง ๋์ ์ผ๋ก ๋ฌ๋ผ์ง๋ค.
This
1. ๋ธ๋ผ์ฐ์ ์ ์ญ์ค์ฝํ์์ console.log(this)
result : window ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
reason : ๋ธ๋ผ์ฐ์ ์ ์ญ ๊ฐ์ฒด๊ฐ window์ด๊ธฐ ๋๋ฌธ์
2. function(){} ๋ด๋ถ์์ this ํธ์ถ
result : window ๊ฐ์ฒด๊ฐ ๋์ด
reason : 'ํจ์'๋ ์ ์ธ ์ window ๊ฐ์ฒด์ '๋ฑ๋ก'๋จ. ์ด ํจ์๋ class์ ์ํ ๊ฒ๋ ์๋๊ณ , ์ ์ญ ์ค์ฝํ์์ ํธ์ถ๋์๊ธฐ ๋๋ฌธ์ this๊ฐ ์ํ ๊ณณ์ window ๊ฐ์ฒด์. ๋ฐ๋ผ์, window.simpleFun()๋ก๋ ํธ์ถ๊ฐ๋ฅ!
3. Class {} ๋ด๋ถ์์ method(){this ํธ์ถ} ์์ฑ
- const counter = new Counter() //์ธ์คํด์ค ์์ฑ!
- '์ ์ญ์ค์ฝํ'์์ counter.increase() //์ธ์คํด์ค.๋ฉ์๋ ํธ์ถ!!
result : this๋ ์ธ์คํด์ค counter์ ๊ฐ๋ฆฌํด
์ฌ์ง ์์ผ๋ก, class Counter๊ฐ console์ ์ฐํ์ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ด this๋ instance counter์ด๋ค
- reason: ์ธ์คํด์ค counter์ ์๋ก์ด method๋ฅผ ์ถ๊ฐ ํ, counter.increase() ํธ์ถํด๋ณด๋ฉด ์๋ก์ด ๋ฉ์๋๊น์ง ์ถ๊ฐ๋ ์ธ์คํด์ค counter๊ฐ console์ ์ฐํ๋๋ค.
๐ซ ์ด ๋, ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ๋ณ์์ ๋ฉ์๋๋ฅผ ํ ๋นํ๋ฉด?!
const caller = counter.increase; caller() //undefined ๋ฆฌํด๋จโ
const / let์ผ๋ก ์ ์ธ๋๋ฉด window ๊ฐ์ฒด์ ๋ฑ๋ก ์กฐ์ฐจ ์๋๋ค. (์์ธ. var์ ๊ฐ๋ฅํด์ง..๊ทธ๋์ var์ ๋น์ถ๋น์ถ๐)
function(){console.log(this)}๋ฅผ ๋ด์ caller๋ฅผ caller()๋ก ํธ์ถํด๋ดค์, caller์ ์ํ ๊ณณ๋ ์๊ณ , window์ ๋ฑ๋ก๋ ์๋์๊ธฐ ๋๋ฌธ์ this๊ฐ ๊ฐ๋ฆฌํค๋๊ฒ ์๊ณ , undefined๋ก ๋ ๋ฒ๋ฆผ.
4. this๊ฐ ๋๊ฐ ํธ์ถํ๋์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฃผ์ธ์ ์ง๋๋ผ๋๊ฑธ ๋ณด๊ณ ์ถ๋ฌ?
์๋ก์ด class๋ฅผ ์์ฑํ, ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ๋์ ๋ค๋ฅธ class์์ ์์ฑํ๋ method๋ฅผ ํ ๋น ํ ํธ์ถํด๋ณด๋ฉด
this๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ด Counter์ด ์๋ Bob์ผ๋ก ๋ฐ๋์ด์๋ค!!
์ด์ฒ๋ผ, JS๋ ํจ์๋ฅผ ๋ค๋ฅธ๊ณณ์ผ๋ก ํ ๋นํ๋ ์๊ฐ this๋ผ๋ ์ ๋ณด๋ฅผ ์์ด๋ฒ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์
object์ ํจ์์ ๊ด๊ณ๋ฅผ this๋ฅผ ๊ฝ๊ฝ ๋ฌถ์ด์ฃผ๋ ค๋ฉด?! bind๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค.
1. bind ์ด์ฉ
class Counter {
count = 0;
increase = function () {
console.log(this);
};
}
const counter = new Counter();
counter.increase();
// const caller= counter.increase; ๋์ ์!!
const caller = counter.increase.bind(counter); //bind์ด์ฉ!!
caller();
2. ํ์ดํ ํจ์ ์ด์ฉ
class Counter {
count = 0;
increase = () => { //ํ์ดํ ํจ์ ์ด์ฉํ๋ฉด bind๋์ ์ด์ฉ ๊ฐ๋ฅ
console.log(this);
};
}
const counter = new Counter();
counter.increase();
const caller = counter.increase;
// const caller = counter.increase.bind(counter);
caller();
'DEV_IN > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Inside JavaScript] Chapter 1. ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ๊ฐ์ (0) | 2023.03.27 |
---|---|
Module (2) | 2023.02.28 |
Prototype (5) | 2023.02.28 |
JavaScript Event Loop๋? (4) | 2023.02.22 |
priceFormatter (0) | 2023.02.08 |