this

this๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ˜ธ์ถœ ๋งฅ๋ฝ(context, ๊ฐ€๋ณ€์ ์ด๋‹ค)์„ ์˜๋ฏธํ•œ๋‹ค. this๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ ์•ฝ์†๋œ ๋ณ€์ˆ˜์ด๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ์–ด๋””์— ์†Œ์†๋˜์–ด ์žˆ๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค

ํ•จ์ˆ˜์—์„œ์˜ this์˜ ์˜๋ฏธ

์ฒซ๋ฒˆ์งธ์˜ˆ์‹œ

function func(){
    if(window === this){
        return "window === this";
    }
}
console.log(func());

์—ฌ๊ธฐ์„œ this ๋Š” ์œˆ๋„์šฐ๋‹ค

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

๋‘๋ฒˆ์งธ์˜ˆ์‹œ

var o = {
    func: function(){
        if(o === this){
            return "o === this";
        }
    }
}
console.log(o.func());

o.func()์˜ this๋Š” o๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค.

์ „์—ญ๊ฐ์ฒด, ์ „์—ญ๋ฉ”์†Œ๋“œ๋Š” window๊ฐ€ ์ƒ๋žต๋˜์–ด ์žˆ๋‹ค. ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ์˜ this๋Š”๋ฉ”์†Œ๋“œ๊ฐ€ ์†Œ์†๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋‘๋ฒˆ์งธ ์˜ˆ์‹œ๋Š” o์˜ ์†Œ์†์ด๊ธฐ ๋•Œ๋ฌธ์— o๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๊ทธ๋ž˜์„œ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ์€ ๋‹ค๋ฅธ๊ฒŒ ์—†๋‹ค. ๋‘˜๋‹ค ์†Œ์†๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”๋ฐ ์ƒ๋žต๋˜์–ด ์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€์˜ ์ฐจ์ด๋‹ค.

์ƒ์„ฑ์ž์™€ this

var funcThis = null;

function Func(){
    funcThis = this;
}

var o1 = Func();
if(funcThis === window){
    console.log('window');
};

var o2 = new Func();
if(funcThis === o2){
    console.log('o2');
};

o1๋Š” window.Func()๊ฐ€ ์ƒ๋žต๋œ ๊ฒƒ์ด๋ฏ€๋กœ window ๋‹ค

o2๋Š” new๋ฅผ ๋ถ™์—ฌ Func();๋ฅผ ์‹คํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋น„์—ฌ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋น„์—ฌ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ž ์•ˆ์—์„œ this๊ฐ€ ๋œ๋‹ค.

์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ž ์•ˆ์—์„œ this๊ฐ€ ๋œ๋‹ค.

new Func(); ๊ฐ€ ๋‹ค ์‹คํ–‰๋œ ํ›„ var o2์— ๋‹ด๊ธด๋‹ค.

var funcThis = null;

function Func(){
    if(o2 === this){
        funcThis = this;
    }
}
var o2 = new Func();
if(funcThis === o2){
    console.log('o2');
};

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Func()ํ•จ์ˆ˜์•ˆ์— if (o2 === this) .. ๋ผ๊ณ  ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์—†๋‹ค. func์•ˆ์—์„œ ํ• ๊ฒฝ์šฐ ์•„์ง o2๋ผ๋Š” ๊ฐ์ฒด์— ๋‹ด๊ธฐ๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— o2๋Š” undefined๊ฐ€ ๋œ๋‹ค.

๊ฐ์ฒด์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™”๊ฐ€ ๋๋‚œ ํ›„, ์–ด๋–ค ์‹๋ณ„์ž์— ๋‹ด๊ธฐ๊ธฐ ์ „์— ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฐธ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” reference ??

function Func(){
    this.area = function(){
        if(o2 === this){
            return 'o2 === this';
        }        
    }
}
var o2 = new Func();
o2.area(); //'o2 === this';

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ์‹์œผ๋กœ ํ–ˆ์„ ๊ฒฝ์šฐ์—” 'o2 === this'; ๊ฐ€ return ๋œ๋‹ค.

apply์™€ this

ํ•จ์ˆ˜๋„ ๊ฐ์ฒด๋‹ค

์˜ˆ์‹œ1 - sum์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

function sum(x,y){
    return x + y;
}
sum(1,2); //3

์˜ˆ์‹œ2

var sum2 = new Function('x','y','return x + y;');
sum(1,2); //3

new๋ฅผ ํ†ตํ•ด์„œ Function์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค. ์ฒซ๋ฒˆ์งธ์ธ์ž x, ๋‘๋ฒˆ์งธ์ธ์ž 'y'๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ(๋งค๊ฐœ๋ณ€์ˆ˜)๋ฅผ ์˜๋ฏธํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์ธ์ž๋Š” ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์— ํ•ด๋‹น๋œ๋‹ค.

์˜ˆ์‹œ2์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋Š”๊ฒƒ์€ ๋Œ€๋‹จํžˆ ๋ถˆํŽธํ•˜๋‹ค. ํŠนํžˆ ์˜ˆ์‹œ2์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž์ฒ˜๋Ÿผ ๋Œ€๋‹จํžˆ ๊ธด๋‚ด์šฉ์ด๋ฉด ๋”๋”์šฑ ๋ถˆํŽธํ•  ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ1์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ๊ฐ€ ํ•จ์ˆ˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ->ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด(Literal).

๋ฆฌํ„ฐ๋Ÿด(Literal)

//๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
var o = {}
//ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด
var arr = {}

new Object ๋‚˜ new Array๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์ด๋ผ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.

var o = {};
var p = {};
function func(){
    switch(this){
        case o:
            console.log('o');
            break;
        case p:
            console.log('p');
            break;
        case window:
            console.log('window');
            break;
    }
}
func(); //'window'
func.apply(o); //'o'
func.apply(p); //'p'

func๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. apply์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ปจํ…์ŠคํŠธ(context,๋งฅ๋ฝ,๊ฐ€๋ณ€์ ์ด๋‹ค.)๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค.

์ „ํ†ต์ ์ธ ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋ฉ”์†Œ๋“œ๋ผ๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์— ๊ฐ•ํ•˜๊ฒŒ ์†Œ์†๋˜์–ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์œ ์—ฐํ•˜๋‹ค.

apply ์„ค๋ช… ์ด๋ฏธ์ง€

apply๋ฅผ ์ด์šฉํ•ด ํ˜ธ์ถœ ํ•˜๋‹ˆ ํ•จ์ˆ˜ func()๋Š” p์˜ ๋ฉ”์†Œ๋“œ๋„ ๋˜๊ณ  o์˜ ๋ฉ”์†Œ๋“œ๋„ ๋๋‹ค. ๊ฐ์ฒด์™€ ํ•จ์ˆ˜๋Š” ๋งค์šฐ ๋Œ€๋“ฑํ•˜๋‹ค. ์™œ๋ƒ๋ฉด ํ•จ์ˆ˜๋„ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ–ˆ๋ƒ๊ฐ€ ํฌ์ธํŠธ๋‹ค. ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ–ˆ๋ƒ์— ๋”ฐ๋ผ ์–ด๋–ค ๊ฐ์ฒด์— ์ข…์†๋˜์—ˆ๋Š”์ง€๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

this๋Š” ๋ณ€ํ™”๋ฌด์Œํ•˜๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์–ด๋””์— ์†Œ์†๋˜์–ด ์žˆ๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์œ ์—ฐํ•˜๋‹ค.

Last updated

Was this helpful?