๐ก this
JS์ this๋ ํธ์ถ ์ ๋์ ์ผ๋ก ๋ฐ๋ ์ ์๋, ์คํ ์ปจํ ์คํธ์ ๋งฅ๋ฝ์ ์ธ ์์ ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
this๋ผ๋ ๋ค์ด๋ฐ์ด ์๋นํ ๋ถ์ ์ ํ๊ฒ ์ ์ฉ๋ ์ฌ๋ก๋ก ๋ณด์ ๋๋ค.
๐ ์คํ ์ปจํ ์คํธ์ Creation Phase
ํจ์๊ฐ ์ ์ธ๋ ๋๊ฐ ์๋, ํธ์ถ๋์ด ์ฝ ์คํ์ ์์ผ ๋ Function.prototype.call
๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก this๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
(ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์คํ ์ปจํ
์คํธ์ this๊ฐ ๋ฐ๋ ์ ์๋ ๊ตฌ์กฐ์
๋๋ค.)
ํธ์ถ ๋ฐฉ์ | this | ์์ | ์ถ๊ฐ ์ค๋ช |
---|---|---|---|
์ ์ญ ๊ณต๊ฐ์์ ํธ์ถ (or ์ผ๋ฐ ํจ์ ํธ์ถ) | ์ ์ญ ๊ฐ์ฒด (Window / global) | printThis( ); | |
๋ฉ์๋ ํํ๋ก ํธ์ถ | ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด | obj.printThis( ); | |
Callback์ผ๋ก ํธ์ถ | HoF ํจ์์ ๋ด๋ถ ๊ตฌํ์ ๋ฐ๋ผ ๋ฐ๋ (๊ธฐ๋ณธ๊ฐ : ์ ์ญ ๊ฐ์ฒด) | hoF(printThis); | ์ฝ๋ฐฑํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ธธ ๋ .bind( ) ํจ์๋ก this๋ฅผ ๊ณ ์ ์์ผ์ค ์ ์์ต๋๋ค. |
์์ฑ์ํจ์ ํธ์ถ | ์๋ก ๋ง๋ค์ด์ง ์ธ์คํด์ค (๊ฐ์ฒด) | function User( ) { ย ย this.age = 20; ย ย console.log(this); }; new User( ); | new ์ฐ์ฐ์๊ฐ ์๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ this๋ก ๋ฐ์ธ๋ฉ์์ผ์ค๋๋ค. |
๋ธ๋ผ์ฐ์ | Node | |
---|---|---|
์ต์์ this | Window | module.exports |
ํจ์ ๊ธฐ๋ณธ this | Window | global |
์ ์ญ๋ณ์ ํฌํจ | โ | โ |
call, apply, bind ํจ์ ์ฌ์ฉ
๐ call, apply๋ ํจ์ ์คํ๊ณผ ๋์์ ์คํ ์ปจํ
์คํธ์ ์ผํ์ฑ์ผ๋ก ์ํ๋ this๋ฅผ ์ฃผ์
ํด์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
๐ bind๋ ์คํ์ ๋์ง ์์ผ๋, ์คํ ์ปจํ ์คํธ์ this๋ฅผ ๊ณ ์ ์์ผ ์ค๋๋ค. ํธ์ถํ ๋๋ง๋ค ๋ฐ์ธ๋ฉํ์ง ์์๋ ๋ฉ๋๋ค.
ํด๋ก์ ํ์ฉ
์์ ์คํ ์ปจํ
์คํธ์ ๋ณ์ (self, _this, that ๋ฑ) ์ this๋ฅผ ํ ๋นํ ๋ค ํ์ ์คํ ์ปจํ
์คํธ์์ ํด๋ก์ ํํ๋ก ๊ฐ์ ธ์ ์ฌ์ฉํฉ๋๋ค.
ํ์ดํ ํจ์ ์ฌ์ฉ
ํ์ดํ ํจ์์ ์คํ ์ปจํ
์คํธ๋ this๋ฅผ ๊ฐ์ง ์์ผ๋ฏ๋ก ์ค์ฝํ ์ฒด์ด๋์ด ์ผ์ด๋ ํด๋ก์ ํํ๋ก ์์ ์ปจํ
์คํธ์ this๋ฅผ ๊ฐ์ ธ๋ค ์๋๋ค.