JavaScript this
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ
this
์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ ๋ฐฉ๋ฒ์ ์ํด ๊ฒฐ์
- ES5๋ ํจ์๋ฅผ ์ด๋ป๊ฒ ํธ์ถํ๋์ง ์๊ดํ์ง ์๊ณ this ๊ฐ์ ์ค์ ํ ์ ์๋
bind
๋ฉ์๋๋ฅผ ๋์
- ES6๋ ์ค์ค๋ก์
this
๋ฐ์ธ๋ฉ์ ์ ๊ณตํ์ง ์๋ ํ์ดํ ํจ์๋ฅผ ์ถ๊ฐ
ํ์ต๋๋ค(์ด๋ ๋ ์์ปฌ ์ปจํ
์คํธ ์์ this
๊ฐ์ ์ ์งํฉ๋๋ค).
global context
- ์๊ฒฉ ๋ชจ๋ ์ฌ๋ถ์ ๊ด๊ณ ์์ด ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
function context
- ํจ์ ๋ด๋ถ์์
this
์ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ ๋ฐฉ๋ฒ์ ์ํด ์ข์ฐ
Case
- ์๊ฒฉ ๋ชจ๋๊ฐ ์๋๋ฉด
this
์ ๊ฐ์ด ํธ์ถ์ ์ํด ์ค์ ๋์ง ์์ผ๋ฏ๋ก, ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์๋ window
์ธ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
- ์๊ฒฉ ๋ชจ๋์์
this
๊ฐ์ ์คํ ๋ฌธ๋งฅ์ ์ง์
ํ๋ฉฐ ์ค์ ๋๋ ๊ฐ์ ์ ์ง
- ECMAScript 5๋
Function.prototype.bind
๋ฅผ ๋์
. f.bind(someObject)
๋ฅผ ํธ์ถํ๋ฉด f
์ ๊ฐ์ ๋ณธ๋ฌธ(์ฝ๋)๊ณผ ๋ฒ์๋ฅผ ๊ฐ์ก์ง๋ง this๋ ์๋ณธ ํจ์๋ฅผ ๊ฐ์ง ์๋ก์ด ํจ์๋ฅผ ์์ฑ
- ํ์ดํ ํจ์์์
this
๋ ์์ ์ ๊ฐ์ผ ์ ์ ๋ฒ์lexical context
์
๋๋ค.
- ํ์ดํ ํจ์๋ฅผ
call()
, bind()
, apply()
๋ฅผ ์ฌ์ฉํด ํธ์ถํ ๋ this
์ ๊ฐ์ ์ ํด์ฃผ๋๋ผ๋ ๋ฌด์
- ํจ์๋ฅผ ์ด๋ค ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํธ์ถํ๋ฉด
this
์ ๊ฐ์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
- ํจ์๋ฅผ
new
ํค์๋์ ํจ๊ป ์์ฑ์๋ก ์ฌ์ฉํ๋ฉด this
๋ ์๋ก ์๊ธด ๊ฐ์ฒด์ ๋ฌถ์
- ํจ์๋ฅผ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ๋ก ์ฌ์ฉํ๋ฉด
this
๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ฌํ ์์๋ก ์ค์
- ์ฝ๋๋ฅผ ์ธ๋ผ์ธ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ๋ก ์ฌ์ฉํ๋ฉด
this
๋ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋ฐฐ์นํ DOM ์์๋ก ์ค์
ref