Skip to content

Latest commit

ย 

History

History
155 lines (111 loc) ยท 3.26 KB

this.md

File metadata and controls

155 lines (111 loc) ยท 3.26 KB

this๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜ ๋‚ด๋ถ€์—ย this๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.ย ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—ย this๋Š” ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.


ํ˜ธ์ถœ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” this

1. ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ (A.b ํ˜•ํƒœ) ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๋กœ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

const obj = {
  value: 1,
  printValue: function () {
    console.log(this);
  },
};

obj.printValue();

// {value: 1, printValue: f}
// obj๊ฐ€ printValue๋ฅผ ํ˜ธ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ
const obj = {
  value: 1,
  printValue: function () {
    console.log(this);
  },
};

const obj2 = {
  value: 2,
  printValue: obj.printValue,
};

obj2.printValue();

// {value: 2, printValue: f}
// obj2๊ฐ€ ํ˜ธ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ

2. ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ this๋Š” ์ „์—ญ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

const obj = {
  value: 1,
  printValue: function () {
    console.log(this);
  },
};

const global = obj.printValue;

global();

// window ๊ฐ์ฒด
// globalํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ A.b์˜ ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ , window ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ
const obj = {
  value: 1,
  printValue: function () {
    const innerFunc = function () {
      console.log(this);
    };
    innerFunc();
  },
};

obj.printValue();

// window ๊ฐ์ฒด
// innerFunc ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ A.b์˜ ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ , window ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ

3. ES5์—์„œ ์ถ”๊ฐ€๋œ call, apply, bind ์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ–ˆ๋Š”์ง€์™€ ์ƒ๊ด€ ์—†์ด ์ง์ ‘ this๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

const func = function () {
  console.log(this);
};

const obj = {
  value: 1,
};

func.call(obj); // {value: 1}
func.apply(obj); // {value: 1}
func.bind(obj)(); // {value: 1}

4. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ์˜ this๋Š” ํ•จ์ˆ˜๊ฐ€ ์†ํ•ด์žˆ๋Š” ๊ณณ์˜ ์ƒ์œ„ this๋ฅผ ๊ณ„์Šน๋ฐ›๋Š”๋‹ค.

const obj = {
  value: 1,
  printValue: function () {
    const innerFunc = () => {
      console.log(this);
    };
    innerFunc();
  },
};

obj.printValue();

// {value: 1, printValue: f}
// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ์˜ this๋Š” ํ•จ์ˆ˜๊ฐ€ ์†ํ•ด์žˆ๋Š” ๊ณณ์˜ ์ƒ์œ„ this๋ฅผ ๊ณ„์Šน๋ฐ›๊ธฐ ๋•Œ๋ฌธ

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š”ย call,ย bind,ย apply๋ฅผ ์‚ฌ์šฉํ•˜์—ฌย this์˜ ๊ฐ’์„ ์ •ํ•  ์ˆ˜ ์—†๋‹ค.


5. new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, this๋Š” ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ธ ์ž์‹ ์ด ๋œ๋‹ค.

function Func(value) {
  this.value = value;
  this.printValue = function () {
    console.log(this);
  };
}

let a = new Func(2);
a.printValue();

// Funcย {value: 2, printValue: ฦ’}

6. strict mode์—์„œ๋Š” this๊ฐ€ undefined ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.


this ์‚ฌ์šฉ๋ฒ•

  • this๋ฅผ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ this ๋ฐ”์ธ๋”ฉ ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜์—์„œ this๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ƒ์œ„์˜ this๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.


์ฐธ๊ณ