this๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์์ฑ๋๋ ์คํ ์ปจํ
์คํธ ๊ฐ์ฒด์
๋๋ค.
์คํ ์ปจํ
์คํธ๋ ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด์
๋๋ค. (ex. window, global ..)
JavaScript๋ ํจ์ ํธ์ถ์ ์ด๋ป๊ฒ ํธ์ถํ๋๊ฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก this๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
์ ์ญ๊ณต๊ฐ์์์ this
๋ฉ์๋ ๋๋ ํจ์๋ก์ ํธ์ถํ ๋ ๋ด๋ถ์์์ this
์ฝ๋ฐฑ ํจ์ ํธ์ถ ์ ๋ด๋ถ์์์ this
์์ฑ์ ํจ์ ๋ด๋ถ์์์ this
์ด๋ฒคํธ ๋ฆฌ์ค๋ ํธ์ถ์ this
์ ์ญ๊ณต๊ฐ์์์ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. (๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ window, NodeJS ํ๊ฒฝ์์๋ global)
this.a์ window.a์ ๊ฐ์ด 100์ผ๋ก ๊ฐ์ ์ด์ ๋ JS์ ๋ชจ๋ ๋ณ์๋ ์ค์ ํน์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. (์ ์ญ๋ณ์๋ฅผ ์ ์ธํ๋ฉด JS์์ง์ ์ด๋ฅผ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ํ ๋น)
ํจ์๋ ๊ทธ ์์ฒด๋ก ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
๋ฉ์๋๋ ์์ ์ ํธ์ถํ ๋์ ๊ฐ์ฒด์ ๊ดํ ๋์์ ์ํํฉ๋๋ค.
์์ ์ (.)์ด ์๋์ง ์ฌ๋ถ๋ง์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํธ์ถํ ์ฃผ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊น๋๋ค.
์ด๋ค ํจ์๋ฅผ ๋ฉ์๋๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ ํธ์ถ์ ์ฃผ์ฒด๋ ๋ฐ๋ก ํจ์๋ช ์์ ๊ฐ์ฒด ์ ๋๋ค. ์ฆ, this๋ ๋ง์ง๋ง ์ ์์ ๋ช ์๋ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค.
ํจ์(์์ ์์ innerFunc)๋ก ํธ์ถํ ๋ this๊ฐ ์ง์ ๋์ง ์์ต๋๋ค.
์ฝ๋ฐฑ ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์์ด๊ธฐ ๋๋ฌธ์, this๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
์์ฑ์ ํจ์๋ ์ด๋ค ๊ณ ํต ์ฑ์ง์ ๊ฐ์ง๋ ๊ฐ์ฒด๋ค์ ์์ฑํ๋๋ฐ ์ฌ์ฉํ๋ ํจ์์ ๋๋ค. ์์ฑ์๋ฅผ ํด๋์ค(class), ํด๋์ค๋ฅผ ํตํด ๋ง๋ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค(instance)๋ผ๊ณ ํฉ๋๋ค.
JavaScript๋ ํจ์์ ์์ฑ์๋ก์์ ์ญํ ์ ํจ๊ป ๋ถ์ฌํ์ต๋๋ค.
์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด
#("btn").click(function(){
console.log(this); // this๋ #btn
})
func.call(thisArg[, arg1[, arg2[, ...]]])
var obj = {
a: 1,
method: function(x, y) {
console.log(this.a, x, y);
}
};
obj.method(2, 3); // 1 2 3
obj.method.call({a: 4}, 5, 6); // 4 5 6
func.apply(thisArg, [argsArray])
var obj = {
a: 1,
method: function(x, y) {
console.log(this.a, x, y);
}
};
obj.method(2, 3); // 1 2 3
obj.method.apply({a: 4}, [5, 6]); // 4 5 6
func.bind(thisArg[, arg1[, arg2[, ...]]])
var func = function(a, b, c, d) {
console.log(this, a, b, c, d); // Window {...} 1 2 3 4
};
func(1, 2, 3, 4);
var bindFunc = func.bind({x: 1});
bindFunc(5, 6, 7, 8); // {x: 1} 5 6 7 8
JavaScript์ this
์ ์ญ๊ณต๊ฐ์์์ this : ์ ์ญ๊ฐ์ฒด (window, global..)
๋ฉ์๋ ๋๋ ํจ์๋ก ํธ์ถํ ๋ ๋ด๋ถ์์์ this
๋ฉ์๋ : ํจ์๋ช ์์ ๊ฐ์ฒด. ์ฆ, ๋ง์ง๋ง ์ ์์ ๋ช ์๋ ๊ฐ์ฒด
ํจ์ : this๋ฅผ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ์ ์ญ๊ฐ์ฒด
์ฝ๋ฐฑํจ์ ๋ด๋ถ์์์ this : ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก this๋ฅผ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ์ ์ญ๊ฐ์ฒด
์์ฑ์ ํจ์ ๋ด๋ถ์์์ this : ๋ง๋ค์ด์ง ์ธ์คํด์ค ์์
์ด๋ฒคํธ ๋ฆฌ์คํฐ ํธ์ถ์ this : ์ด๋ฒคํธ๋ฅผ ๋ฐ์์๊ธด ๊ฐ์ฒด
๋ช ์์ ์ผ๋ก this ๋ฐ์ธ๋ฉํ๊ธฐ
call
apply
bind
this๊ฐ ๋ญ์ผ?
[Javascript] this์ ๋ฐ์ธ๋ฉ
ํจ์ ํธ์ถ ์ ๊ฒฐ์ ๋๋ this