Skip to content

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉด์ ‘ ๋‹จ๊ณจ ๊ฐœ๋…๋“ค 4 (This)ย #77

@leemember

Description

@leemember

This (์ด๊ฒƒ)

  • JS์—์„œ this๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ์ด๊ฒƒ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด ๋‹ฌ๋ผ์ง„๋‹ค.
  • this๋Š” ๋‚ด๊ฐ€ ์•ž์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ์ธ์Šคํ„ด์Šค๋‚˜, ๊ฐ์ฒด ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋๋‹ค. ํŠน์ •ํ•œ ๊ฐ์ฒด์™€ this๋ฅผ ๋ฌถ์–ด๋†“์€ ๊ฒƒ์€ this ๋ฐ”์ธ๋”ฉ์ด๋ผ๊ณ  ์นญํ•œ๋‹ค. ์ž๋ฐ”๋‚˜ C์—์„œ์˜ this๋Š” ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์— ๊ณ ์ •๋˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋Ÿฐํƒ€์ž„ ์ƒ์—์„œ this ๋ฐ”์ธ๋”ฉ์ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

๊ธ€๋กœ๋ฒŒ ์ปจํ…์ŠคํŠธ์—์„œ์˜ this๋ž€?

  • ๋ธŒ๋ผ์šฐ์ € : this = window ๋‹ค.
  • ๋…ธ๋“œ : ๋ชจ๋“ˆ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ฝ˜์†”๋กœ๊ทธ์— ๋…ธ๋“œ์˜ this๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ํ……ํ…… ๋นˆ ๊ฐ์ฒด๊ฐ€ ์ถœ๋ ฅ์ด ๋œ๋‹ค.
    globalThis๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „์—ญ ๊ฐ์ฒด๋“ค์ด ์ถœ๋ ฅ๋œ๋‹ค.

ex) setTimeout, setInterver ๊ฐ™์€ ๊ฒƒ๋“ค. globalThis๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ this๋Š” window๋‹ค.


ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ this

function fun() {
  console.log(this);
}
fun();

use stric = ์—„๊ฒฉ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ, undefined๊ฐ€ ๋œฌ๋‹ค.

๋А์Šจํ•œ ๋ชจ๋“œ์—์„œ๋Š” globalThis๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.


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

// ์ด ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์•ˆ์—์„œ
function Cat(name) {
  this.name = name;
    // ์•ž์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ์˜ค๋ธŒ์ ํŠธ ๊ทธ ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  this.printName = function() {
  console.log(this.name);
 }
}

const cat1 = new Cat('๋ƒ์˜น');
const cat2 = new Cat('๋ซ„์˜น');
cat1.printName();
cat2.printName();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions