ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] this ํ‚ค์›Œ๋“œ : ์ด๊ฒƒ ๋ญ์—์š”?
    Web Programming/JavaScript 2025. 5. 31. 19:58

     

    ๐Ÿ“š ์ƒˆ๋กœ์šด ๋„์ „์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋งˆ์Œ๊ฐ€์ง

     

    ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ทจ์ค€์— ํ„ฐ๋‹ ํฌ์ธํŠธ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ์˜ ํ”„๋ก ํŠธ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„ ํ”Œ๋Ÿฌ์Šค 5๊ธฐ์— ์ง€์›์„ ํ•ด์„œ ํ•ฉ๊ฒฉํ–ˆ๋‹ค. 

    ๊ฐœ๊ฐ•๊นŒ์ง€๋Š” ์‹œ๊ฐ„์ด ์ข€ ๋‚จ์•˜์ง€๋งŒ ๊ฐœ๊ฐ• ์ „๊นŒ์ง€ ์ด๊ฒƒ์ €๊ฒƒ ๊ธฐ์ดˆ์ ์ธ ๊ฒƒ๋“ค์„ ๋‹ค์‹œ ๋‹ค์ ธ๋†“๊ณ ์ž ํ•ด์„œ ์œ„ํ‚ค๋ถ์Šค์˜ '๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive'์™€ ํ•œ๋น› ๋ฏธ๋””์–ด์˜ '๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ'๋ฅผ ์˜ค๊ฐ€๋ฉฐ ์ฝ์–ด๋ณด๊ณ  ์žˆ๋‹ค.

     

    ๊ณต๋ถ€๋ฅผ ํ•˜๋Š” ์ˆœ์„œ๋Š” ๋”ฑํžˆ ์—†๋‹ค.

    ๊ทธ๋ƒฅ ๋ชฉ์ฐจ๋ฅผ ๋ณด๋‹ค๊ฐ€ ์‹ฌ๋„์žˆ๊ฒŒ ๋ฐ”๋ผ๋ณด๊ณ  ์‹ถ์€ ๊ณณ์„ ํŽผ์ณ์„œ ๊ณต๋ถ€ํ•œ๋‹ค.

    ๊ทธ ์ด์ „์˜ ํŒŒํŠธ๋ฅผ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์ž ์‹œ ๊ธฐ์ˆ ๋ถ€์ฑ„๋กœ ๋‚จ๊ฒจ๋‘๊ณ , ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„๊นŒ์ง€๋งŒ ๊ณต๋ถ€๋ฅผ ํ•œ ๋’ค์—

    ๊ธฐ์ˆ ๋ถ€์ฑ„๋Š” ์ฐจ์ฐจ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐˆ ์ƒ๊ฐ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฐ์‡„์ ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด์ž๋Š” ์‹ฌ์‚ฐ(?)

     

    ์šฐ์„  ์˜ค๋Š˜ ์ฒซ ๋ฒˆ์งธ๋กœ ์จ๋‚ด๋ ค๊ฐ€ ๋ณผ TIL์€ this ํ‚ค์›Œ๋“œ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์•„๊ฐ€ this ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ข€ ํ•ด๋ณผ๊นŒ ํ•œ๋‹ค.

     


     

     

    ๐Ÿ‘† this ํ‚ค์›Œ๋“œ, ์ด๊ฒƒ ๋ญ์—์š”?

     

    ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ์ฒด๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 'ํ”„๋กœํผํ‹ฐ'์™€ ๋™์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” '๋ฉ”์„œ๋“œ'๋ฅผ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์€ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์‘๋‹น ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋ฉด ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ์ฒด์— ๋ฌถ์—ฌ์žˆ์„ ์ด์œ ๊ฐ€ ์—†์ง€.

     

    ์ฉ, ๊ทธ๋ž˜์„œ ์–ด์จŒ๋“  ๊ฐ์ฒด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด, ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•œ๋ฐ,

    JS์—์„œ๋Š” ์ด๋ฅผ this ํ‚ค์›Œ๋“œ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

     

    ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ž๊ธฐ๊ฐ€ ํฌํ•จ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉ๋ฒ•

    ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

    const myCar = {
      color: "grey",
      getColor() {
        return myCar.color;
      }
    };
    
    console.log(`myCar's color is ${myCar.getColor()}.`);

     

    ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์—์„œ๋Š” ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ๊ฐ์ฒด ์ด๋ฆ„์„ ํ†ตํ•ด ์žฌ๊ท€์ ์œผ๋กœ ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

    '๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive' ์—์„œ๋Š” ์ด ์ฐธ์กฐ ํ‘œํ˜„์‹์ด ํ‰๊ฐ€๋˜๋Š” ์‹œ์ ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ํ•จ์ˆ˜ ๋ชธ์ฒด๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ด๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ๋˜ํ•œ, ์„ ์–ธ๋œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์€ myCar ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ธฐ ์ง์ „์— ํ‰๊ฐ€๋œ๋‹ค๊ณ ๋„ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค.

     

    ์ฆ‰, getColor() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์—์„œ๋Š” ์ด๋ฏธ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ํ‰๊ฐ€๋Š” ์™„๋ฃŒ๋˜์–ด์žˆ๊ณ , myCar ์‹๋ณ„์ž์— ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ ์ดํ›„๊ธฐ ๋•Œ๋ฌธ์— myCar๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

     

    ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ JS๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์„ ์–ธ, ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ~~~~์˜ ์—†๋‹ค.

     

     

    ๋‚œ ์ผ๋‹จ ์•„์˜ˆ ์—†์–ด์š”.

     

     

    ์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์ž˜ ์•ˆ์“ฐ์ž–์•„์š”.

     

    ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•  ๋•Œ์—๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹๋ณ„์ž์— ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ ๋Š” ํ•œ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์€ ๋จผ์ € ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ์ดํ›„์— ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

     

    ํ—Œ๋ฐ, ๊ฐ์ฒด์˜ ํ‰๊ฐ€๋Š” ์‹๋ณ„์ž์— ํ• ๋‹นํ•˜๊ธฐ '์ง์ „'์— ํ‰๊ฐ€๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๋ฉด, ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ์‹œ์ ์—์„œ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ด์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์‹๋ณ„์ž์˜ ์ด๋ฆ„์„ ํ†ตํ•ด ์žฌ๊ท€์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฐ์ฒด ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ๋œ๋‹ค. ์–ด๋–ค ์‹๋ณ„์ž์— ์–ด๋–ค ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ•  ์ค„ ์•Œ๊ณ ?

     

    ๊ทธ๋ž˜์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด, ๋˜๋Š” ๊ฐ์ฒด ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน์ˆ˜ํ•œ ์‹๋ณ„์ž, this๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

     

    ์•„๋ž˜๋Š” this ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ '๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive'์˜ ์ •์˜๋‹ค.

    "this๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด ๋˜๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๊ธฐ ์ฐธ์กฐ ๋ณ€์ˆ˜(self-referencing variable)๋‹ค. this๋ฅผ ํ†ตํ•ด ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด ๋˜๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด ๋˜๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค."

     

     

     

    ๐Ÿ˜“ this ๋ฐ”์ธ๋”ฉ

    this ํ‚ค์›Œ๋“œ๋Š” ์ž๋™์œผ๋กœ, ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์ฝ”๋“œ ์–ด๋””์„œ๋“  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

    this๋ฅผ ์ „์—ญ ๋ณ€์ˆ˜๋กœ๋„, ์ง€์—ญ ๋ณ€์ˆ˜๋กœ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ํ•˜์ง€๋งŒ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ์˜ํ•ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์„ this ๋ฐ”์ธ๋”ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.

     

    ๋ฐ”์ธ๋”ฉ์ด๋ž€?

    ์‹๋ณ„์ž์™€ ๊ฐ’์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณ€์ˆ˜ ์„ ์–ธ์€ ๋ณ€์ˆ˜ ์ด๋ฆ„(์‹๋ณ„์ž)๊ณผ ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

     

     

    ์ฆ‰, this ๋ฐ”์ธ๋”ฉ์ด๋ž€ this ์‹๋ณ„์ž์™€ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

     

    ์œ„์—์„œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๋กœ ์„ ์–ธํ–ˆ๋˜ ๊ฐ์ฒด myCar์˜ ๋ฉ”์„œ๋“œ์—์„œ myCar ์‹๋ณ„์ž๋ฅผ this ํ‚ค์›Œ๋“œ๋กœ ๊ต์ฒดํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    const myCar = {
      color: "grey",
      getColor() {
        return this.color;
      }
    };
    
    console.log(`myCar's color is ${myCar.getColor()}.`);

     

    ์ด ๊ฒฝ์šฐ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์€ myCar์ด๋‹ค.

     

    ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋Š” ์–ด๋–จ๊นŒ.

    class Car {
      constructor(color) {
        this.color = color;
      }
    
      getColor() {
        return this.color;
      }
    }
    
    const myCar = new Car("grey");
    
    console.log(`myCar's color is ${myCar.getColor()}.`);

     

    ์—ฌ๊ธฐ์„œ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค. ์ฆ‰ myCar๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

     

    ์ด๋ ‡๊ฒŒ this๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์ƒ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

    JS์˜ this๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ this ๋ฐ”์ธ๋”ฉ์ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค. 

     

     

    ๐Ÿƒ‍โ™‚๏ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ this ๋ฐ”์ธ๋”ฉ

    ๊ทธ๋Ÿผ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” this ๋ฐ”์ธ๋”ฉ์˜ ๋‹ค์–‘ํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž.

    ์˜ˆ์ œ๋Š” ์ƒ๊ธฐํ•œ ์„œ์ ์ธ '๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive'์—์„œ ์ผ๋ถ€ ๋ฐœ์ทŒํ–ˆ๋‹ค.

    1. ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ

    ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ this์—๋Š” ์ „์—ญ ๊ฐ์ฒด, ์ฆ‰ window ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

    ํ•˜์ง€๋งŒ strict mode(์—„๊ฒฉ ๋ชจ๋“œ)๊ฐ€ ์ ์šฉ๋œ ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ this์—๋Š” undefined๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

    ๋˜ํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋„ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ this์—๋Š” ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

    ์ฆ‰, ์–ด๋– ํ•œ ํ•จ์ˆ˜์ผ์ง€๋ผ๋„ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” this์— ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  this๋Š” '๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ์ž๊ธฐ ์ฐธ์กฐ ๋ณ€์ˆ˜'์ด๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ this๋Š” ๋ฌด์˜๋ฏธํ•˜๋‹ค.

     

    function hello() {
      console.log("hello์˜ this: ", this); //window
      
      function world() {
        console.log("world์˜ this: ", this); //window
      }
      
      world();
    };
    
    hello();

     

    ์œ„์™€ ๊ฐ™์ด ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์ค‘์ฒฉ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this์—๋„ ์ „์—ญ ๊ฐ์ฒด window๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

     

    function hello() {
      'use strict';
      console.log("hello์˜ this: ", this); //undefined
      
      function world() {
        console.log("world์˜ this: ", this); //undefined
      }
      
      world();
    };
    
    hello();

     

    use strict๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์— strict mode๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ undefined๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

     

    2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

    ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ?

    ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this์—๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

    const myCar = {
      color: "grey",
      getColor() {
        return this.color;
      }
    };
    
    console.log(`myCar's color is ${myCar.getColor()}.`); //myCar๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

     

    ์ฆ‰, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” . ์—ฐ์‚ฐ์ž ์•ž์˜ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

    ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์ด ์žˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋ฅผ 'ํ˜ธ์ถœํ•œ' ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

    ์™œ๋ƒํ•˜๋ฉด ์œ„์˜ ์˜ˆ์ œ์—์„œ getColor ๋ฉ”์„œ๋“œ๋Š” getColor๋ผ๋Š” ์ด๋ฆ„์˜ ํ”„๋กœํผํ‹ฐ์— ๋ฐ”์ธ๋”ฉ ๋œ ํ•จ์ˆ˜๋‹ค. ๋”ฐ๋ผ์„œ myCar ๊ฐ์ฒด์˜ getColor ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์— ํฌํ•จ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด์ผ ๋ฟ์ด๊ณ , getColor ํ”„๋กœํผํ‹ฐ๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์„ ๋ฟ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ getColor ๋ฉ”์„œ๋“œ๋Š” ๋ณ„๋„์˜ ์ผ๋ฐ˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    3. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜ธ์ถœ

    ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ํ•ด๋‹น ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ๋ฏธ๋ž˜์— ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

    class Car {
      constructor(color) {
        this.color = color;
      }
    
      getColor() {
        return this.color;
      }
    }
    
    const myCar = new Car("grey");
    
    console.log(`myCar's color is ${myCar.getColor()}.`); //Car์˜ ์ธ์Šคํ„ด์Šค myCar๊ฐ€ ๋ฐ”์ธ๋”ฉ๋จ

     

     

    ์ด ์™ธ์—๋„ Function.prototype.apply, Function.prototype.call, Function.prototype.bind ๋ฉ”์„œ๋“œ์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ์— ๋”ฐ๋ฅธ ๋ฐ”์ธ๋”ฉ์ด ์žˆ์ง€๋งŒ, prototype์ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋กœ ์Œ“์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— prototype์— ๋Œ€ํ•œ ํ•™์Šต์ด ๋๋‚˜๋Š” ๋Œ€๋กœ ํ•ด๋‹น ํŒŒํŠธ๋ฅผ ๋‹ค์‹œ ํ•™์Šตํ•˜์—ฌ ์ •๋ฆฌํ•ด ๋ณผ ์ƒ๊ฐ์ด๋‹ค.

     


     

    ์ด๋ฒˆ TIL์€ this ํ‚ค์›Œ๋“œ์™€ this ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

    prototype์ด๋ž€ ๊ฝค ์ฑ…์˜ ์•ž ๋ถ€๋ถ„์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด๊ธด ํ•˜๋‚˜, ๊ทธ๋™์•ˆ์€ '์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ'์— ์ง‘์ค‘ํ•œ ๋‚˜๋จธ์ง€ ์ด๋ ‡๊ฒŒ ์ƒ์„ธํ•˜๊ฒŒ ๋“ค์—ฌ๋‹ค ๋ณด๋Š” ์Šต๊ด€์ด ์—†์—ˆ๊ธฐ์— ์ง€๊ธˆ์˜ ๋‚ด๊ฒŒ๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด ์ ์„ ๊นŠ์ด ๋ฐ˜์„ฑํ•˜๋ฉฐ ์ด๋ ‡๊ฒŒ ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋Š” ์—ฐ์‡„ ํ•™์Šต์„ ํ†ตํ•ด ๋‹ค์‹œ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํƒ„ํƒ„ํžˆ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

Designed by Tistory.