์ƒˆ์†Œ์‹

Languages/Java Script

[Js] this | ํ•จ์ˆ˜ํ˜ธ์ถœ | ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ | allpy, call | ๊ฐ์ฒด

  • -
๋ฐ˜์‘ํ˜•

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ "์ƒํ™œ์ฝ”๋”ฉ"์˜ ์ด๊ณ ์ž‰ ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ฌ๋ฆฐ ๊ฒŒ์‹œ๊ธ€ ์ž…๋‹ˆ๋‹ค.

์ƒ์—…์ ์ธ ์šฉ๋„๊ฐ€ ์•„๋‹Œ, ๊ฐœ์ธ ๊ณต๋ถ€ ์ •๋ฆฌ ๋ชฉ์ ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ž„์„ ๋ฏธ๋ฆฌ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

 

 


 



this

this๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋งฅ๋ฝ(context)๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋งฅ๋ฝ์ด๋ผ๋Š” ๊ฒƒ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ์˜๋ฏธ์ธ๋ฐ ์ฆ‰ ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์ด ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๋œป์ด๋‹ค. ํ•จ์ˆ˜์™€ ๊ฐ์ฒด์˜ ๊ด€๊ณ„๊ฐ€ ๋Š์Šจํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ this๋Š” ์ด ๋‘˜์„ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์‹ค์งˆ์ ์ธ ์—ฐ๊ฒฐ์ ์˜ ์—ญํ• ์„ ํ•œ๋‹ค.

 

์ฆ‰ this๋Š” ์•ฝ์†๋œ ๋ณ€์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ ๋ณ€์ˆ˜์ด๋‹ค.

์ด ๊ฐ’์˜ ์˜๋ฏธ๋Š” ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๋œป์ด๋‹ค.

 

 

ํ•จ์ˆ˜ํ˜ธ์ถœ

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ this๋Š” ๋ฌด์—‡์„ ๊ฐ€๋ฅดํ‚ค๋Š”์ง€ ์‚ดํŽด๋ณด์ž. this๋Š” ์ „์—ญ๊ฐ์ฒด์ธ window์™€ ๊ฐ™๋‹ค.

 

์ฆ‰, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๊ฐ์ฒด๊ฐ€ ๋ฌด์—‡์ด๋ƒ!๋ฅผ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

์ „์—ญ๊ฐ์ฒด window๋Š” ์ƒ๋žต๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค window.func()๋ผ๊ณ  ํ•œ๋‹ค๋ฉด func()์˜ ๊ฐ์ฒด๋Š” window์ด๋‹ค.

<script>
      function func(){
          if(window === this){
              document.write("window === this");
          }
      }
      func(); 
</script>

๊ทธ๋ž˜์„œ ์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” "window === this" ์ด๋‹ค!

 

 

๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ

๊ฐ์ฒด์˜ ์†Œ์†์ธ ๋ฉ”์†Œ๋“œ์˜ this๋Š” ๊ทธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค.

<!DOCTYPE html>
<html>
<head>
	<title>์ƒ์„ฑ์ž</title>
</head>
<body>
<script type="text/javascript">
	var o = {//๊ฐ์ฒด o์ƒ์„ฑ.
		func : function(){//์†์„ฑ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ฃผ์—ˆ์œผ๋‹ˆ, ๋ฉ”์†Œ๋“œ์ž„.
			if(o === this){//์ด ํ•จ์ˆ˜์˜ ๊ฐ์ฒด๋Š” o์ž„. --> this = o
				document.write("o === this");
			}
		}
	}
	o.func();


</script>
</body>
</html>

 

๊ฒฐ๊ณผ๋Š” 

 

์ด๋ฒˆ์—” ์ƒ์„ฑ์ž์—์„œ this์˜ ์˜๋ฏธ๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

 

์ƒ์„ฑ์ž์˜ ํ˜ธ์ถœ

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ์™€ new๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

<!DOCTYPE html>
<html>
<head>
	<title>์ƒ์„ฑ์ž</title>
</head>
<body>
<script type="text/javascript">
	var funcThis = null; 
	 
	function Func(){//Func๋ผ๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ
	    funcThis = this; //์ดํ•จ์ˆ˜์˜ this๋Š” window์ž„. ์ด๊ฒƒ์„ funcThis์— ๋„ฃ์Œ.
	}
	var o1 = Func();//์–˜๋Š” ๊ทธ๋ƒฅ ์œ„ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ•˜๋Š” ๊ฒƒ์ž„. 
	if(funcThis === window){
	    document.write('window <br />');
	}
	 
	var o2 = new Func(); //์ƒ์„ฑ์ž ๊ฐ์ฒด ์ƒ์„ฑ 
	if(funcThis === o2){ //์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ž ์•ˆ์—์„œ this๊ฐ€ ๋จ.
	    document.write('o2 <br />');
	}
</script>
</body>
</html>

 

 

๊ฒฐ๊ณผ

 

 

์ƒ์„ฑ์ž๋Š” ๋นˆ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฐ์ฒด๋‚ด์—์„œ this๋Š” ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์ด๋‹ค.

 

์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ฐ์ฒด๋Š” ๋ณ€์ˆ˜์—๋„ ํ• ๋‹น๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— this๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์–ด๋– ํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

๋งŒ์•ฝ ์œ„ ์ฝ”๋“œ์—์„œ Func() ๊ฐ€ ์ •์˜๋œ ๊ณณ์— if(o2==this) ๋ผ๋Š” ์กฐ๊ฑด๋ฌธ์„ ๋„ฃ๋Š”๋‹ค๋ฉด ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

์ด์œ ๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด, ํ˜ธ์ถœ์ด ๋๋‚œ ํ›„ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ์ „์—๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ์ง€๋งŒ o2๋ผ๋Š” ๋ณ€์ˆ˜์— ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— defined๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

<script>
    function Func(){
        document.write(o);
    }
    var o = new Func();
</script>

๊ฒฐ๊ณผ๋Š” : undefined

 

๊ฒฐ๋ก ์ ์œผ๋กœ ์ƒ์„ฑ์ž ์•ˆ์—์„œ this๋Š” ๊ทธ ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์ž.

<script>
	function sum(x,y){return x+y;}
    document.write(sum(1,2));
    
    //์œ„ ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    // ์œ„ ๋ฐฉ๋ฒ•์„ ํ•จ์ˆ˜ sum()์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค๊ณ  ํ•˜๊ณ  ์ด๋ฅผ "ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด"์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    
    
    var sum2 = new Function('x','y', 'return x+y;');
    document.wirte(sum2(1,2));
    //์œ„ ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
</script>

์œ„ ๋ฐฉ๋ฒ• ์™ธ์—๋„

var p = {} ..์ด๋Ÿฐ์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์ด๋ผ๊ณ  ํ•˜๋ฉฐ (new Object ๋กœ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.)

var a = [1,2,3]; ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด ์ด๋ผ๊ณ  ํ•œ๋‹ค. (new Array(1,2,3) ์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ์Œ)

 

๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์  ์ฒด๊ณ„๋ฅผ "๋ฆฌํ„ฐ๋Ÿด"์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์ฆ‰ ์œ„ ์„ค๋ช…์— ์˜ํ•˜๋ฉด ๊ฒฐ๊ตญ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑ๋œ ํ•จ์ˆ˜ sum ์€ ๊ฐ์ฒด์ด๊ณ , ์ด ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ๊ฐ’(๋ฉ”์†Œ๋“œ๋‚˜ ์†์„ฑ ๋“ฑ) ์ด ์•„๋ž˜์— ๋ฐฐ์šธ apply์™€ call์ธ ๊ฒƒ์ด๋‹ค.

 

apply, call

ํ•จ์ˆ˜์˜ ๋ฉ”์†Œ๋“œ์ธ apply, call์„ ์ด์šฉํ•˜๋ฉด this์˜ ๊ฐ’์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

<script>
    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); //๊ฒฐ๊ณผ o
    func.apply(p);//๊ฒฐ๊ณผ p
</script>

func๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์ด๊ณ , ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ํ‘œ์ค€ ๋ฉ”์†Œ๋“œ์ธ apply๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ปจํ…์ŠคํŠธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฐ’์„ o๋กœ ์ฃผ๋ฉด this๊ฐ€ o๊ฐ€ ๋œ๋‹ค.

 

์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜์ž๋ฉด, func = ๊ฐ์ฒด์ด๊ณ  ์•„๋ฌด๊ฒƒ๋„ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด ์ „์—ญ ๊ฐ์ฒด์ธ window๋ฅผ ํฌํ•จํ•œ๋‹ค.

๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด o.func์˜ ๋Š๋‚Œ์œผ๋กœ ํ•ด์„ ํ•˜๋ฉด๋œ๋‹ค.

 

์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ•˜๋Š๋ƒ์˜ ๋”ฐ๋ผ ๋งฅ๋ฝ์ ์œผ๋กœ ์–ด๋– ํ•œ ๊ฐ์ฒด์˜ ์ข…์†๋˜๋Š” ์กด์žฌ์ด๊ธฐ๋„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.