this
this๋ ํจ์ ๋ด์์ ํจ์ ํธ์ถ ๋งฅ๋ฝ(context)๋ฅผ ์๋ฏธํ๋ค. ๋งฅ๋ฝ์ด๋ผ๋ ๊ฒ์ ์ํฉ์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ค๋ ์๋ฏธ์ธ๋ฐ, ์ฆ, ํจ์๋ฅผ ์ด๋ป๊ฒ ํธ์ถํ๋๋์ ๋ฐ๋ผ์ this๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ด ๋ฌ๋ผ์ง๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ฒด ์์ ๋ฉ์๋์์ this๊ฐ ๋์ค๋ฉด ์ด๊ฒ์ ๋ฉ์๋๊ฐ ์ํด์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. ์ด์ฒ๋ผ ํจ์์ ๊ฐ์ฒด์ ๊ด๊ณ๊ฐ ๋์จํ ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ์ด ๋์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ค์ง์ ์ธ ์ฐ๊ฒฐ์ ์ ์ญํ ์ ํ๋ค
function func() {
if(window === this) {
console.log("window === this");
}
}
์์ funcํจ์๋ฅผ ์คํํ๋ฉด "window === this"๊ฐ ์ถ๋ ฅ๋๋ค. ์ด๊ฒ์ ํด์ํด๋ณด๋ฉด, func ํจ์ ๋ด์์ this๋ ์น๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ญ๊ฐ์ฒด์ธ window๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด๋ค.
์์ฑ์์ this
ํจ์ ์์์ this๋ ๊ทธ ํจ์๊ฐ ์ํด์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. ์ด ๊ฐ์ฒด๋ ์ฌ์ฉ์๊ฐ ๋ง๋ ๊ฐ์ฒด์ผ์๋ ์๊ณ ์ ์ญ๊ฐ์ฒด์ผ ์๋ ์๋ค.
var funcThis = null;
function Func(){//๊ฒฐ๊ตญ this null์ด ๋๋ค.
funcThis = this;//Func์ this๊ฐ funcThis์ ํ ๋น๋๋๋ฐ, ์์ var๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ญ๋ณ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
}
var o1 = Func();
if(funcThis === window) {//์ ์ญ๊ฐ
document.write('window </br>');
}
//new Func() ์์ฑ์๋ฅผ ํตํด ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ ๋ณ์ o2์ ๋ด๊ธด๋ค.
var o2 = new Func();//์์ฑ์๋ก ํธ์ถํ๋ฉด ์๋ก์ด ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋ฌ๋ฉด this๋ ์ด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
if(funcThis === o2) {
document.write('window </br>');
}
๋๊ฐ์ ํจ์์ง๋ง, ์์ฑ์๋ก ์ฌ์ฉ๋๋ฉด this๋ ์์ฑ๋๋ ๊ฐ์ฒด๊ฐ ๋๊ณ , ํจ์๋ก ํธ์ถํ๋ฉด ์ด ํจ์ ์์์ this๋ window๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์๋ก ์์ฑ๋๋ ๊ฐ์ฒด๊ฐ ์์ฑ์ ์์์ this๊ฐ ๋๋ค.(์์ฑ์ ์์์ this๋ ์์ฑ์๊ฐ ๋ง๋ ๊ฐ์ฒด์ด๋ค.)
apply์ call
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ผ๋ง๋ ์ ์ฐํ์ง๋ฅผ ๊ทน๋ช ํ๊ฒ ๋ณด์ฌ์ค๋ค. ํจ์๋ ๊ฐ์ฒด๋ผ๋ ๊ฒ์ ๋ค์ ๋ ์ฌ๋ ค๋ณด์. ํจ์๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ property(์์ฑ)์ ๊ฐ์ง ์ ์๋ค. ํจ์๊ฐ ๊ฐ์ง ์ ์๋ ์์ฑ ์ค์ apply์ call์ด ์๋ค.
function sum(x,y){return x+y;}//ํจ์ ๋ฆฌํฐ๋ด(literal)
sum(1,2);//3
var sum2 = new Function('x','y','return x+y');
์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ ์ธ์๋ ๋งค๊ฐ๋ณ์์ฒ๋ผ ์ฌ์ฉ๋๊ณ , ๋ง์ง๋ง ์ธ์๋ ํจ์ sum์ ๋ณธ๋ฌธ์ ํด๋นํ๋ค. ์๋์ฒ๋ผ new๋ฅผ ์ด์ฉํ ์๋ ์์ง๋ง ๋ฆฌํฐ๋ด์ด๋ผ๋ ๋ฌธ๋ฒ์ ์ฒด๊ณ๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ๋ค.
var sum2 = new Function('x','y','return x+y');
ํจ์ ๋ฆฌํฐ๋ด : function sum (x,y) {...}
๊ฐ์ฒด ๋ฆฌํฐ๋ด : var o = {...}
๋ฐฐ์ด ๋ฆฌํฐ๋ด : var a = [1,2,3];
apply์ this
var o = {}
var p = {}
function func(){
switch(this) {
case o:
document.write('o<br />');
break;
case p:
document.write('p<br />');
break;
case window:
document.write('window<br />');
break;
}
}
func();//ํจ์๋ก์ ํธ์ถํ๋ฉด window๊ฐ ์ถ๋ ฅ.
func.apply(o);//ํจ์ func๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ธ์๋ก o๋ฅผ ์ ๋ฌํ๋ค.
func.apply(p);//ํจ์ func๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ธ์๋ก p๋ฅผ ์ ๋ฌํ๋ค.
Last updated
Was this helpful?