this

์ด์ง„๊ฒฝยท2023๋…„ 5์›” 27์ผ
0

๐Ÿค JAVASCRIPT

๋ชฉ๋ก ๋ณด๊ธฐ
7/9

โœ… this

๐Ÿ’ก this๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฒฐ์ •๋œ๋‹ค!

1๏ธโƒฃ ์ „์—ญ๊ณต๊ฐ„์—์„œ์˜ this

โ—๏ธ ์ „์—ญ๊ณต๊ฐ„์—์„œ this๋Š” ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ๊ฐœ๋…์ƒ ์ „์—ญ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ๋ฐ”๋กœ ์ „์—ญ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

var a = 1;
console.log(a);        //1
console.log(window.a); //1
console.log(this.a);   //1 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ํŠน์ •๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ์„œ ๋™์ž‘ํ•˜๊ธฐ๋•Œ๋ฌธ์— var์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด window.a์™€ this.a ๋ชจ๋‘ 1๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

2๏ธโƒฃ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ์˜ this

๋ฉ”์„œ๋“œ๋กœ์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ถœ ์ฃผ์ฒด๋Š” ๋ฐ”๋กœ ํ•จ์ˆ˜๋ช… ์•ž์˜ ๊ฐ์ฒด์ด๋‹ค. โ—๏ธ๋งˆ์ง€๋ง‰ ์  ์•ž์— ๋ช…์‹œ๋œ ๊ฐ์ฒด๊ฐ€ ๊ณง this์ด๋‹ค.

3๏ธโƒฃ ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ this

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ์˜ this๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๋Š” ํ•จ์ˆ˜๊ฐ€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ์˜ this๋ฅผ ๋ฌด์—‡์œผ๋กœ ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋ฉฐ
  • ํŠน๋ณ„ํžˆ ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๊ณ  ์ „์—ญ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค.

4๏ธโƒฃ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ this

์ƒ์„ฑ์ž๋Š” ๊ตฌ์ฒด์ ์ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ํ‹€์ด๋‹ค. ์—ฌ๊ธฐ์— ๊ตฌ์ฒด์ ์ธ ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์„ฑ์„ ๋”ํ•ด ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ๋œ ๊ฒฝ์šฐ ๋‚ด๋ถ€์—์„œ์˜ this๋Š” ๊ณง ์ƒˆ๋กœ ๋งŒ๋“ค ๊ตฌ์ฒด์ ์ธ ์ธ์Šคํ„ด์Šค ์ž์‹ ์ด ๋œ๋‹ค.

let Cat = function(name, age) {
  this.bark = '์•ผ์˜น';
  this.name = name;
  this.age = age;
}

let nabi = new Cat('๋‚˜๋น„', 3)

console.log(nabi)

/*
[object Object] {
  age: 3,
  bark: "์•ผ์˜น",
  name: "๋‚˜๋น„"
} 
*/

โœ… this๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•

1๏ธโƒฃ call ๋ฉ”์„œ๋“œ

์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ this๋กœ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ์ดํ›„์˜ ์ธ์ž๋“ค์„ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ๋‹ค.

let func = function(a,b,c){
  console.log(this, a,b,c)
}

func(1,2,3) //{window...}, 1, 2, 3
func.call({a:1}, 2, 3, 4) //{a:1}, 2, 3, 4

2๏ธโƒฃ apply ๋ฉ”์„œ๋“œ

call๊ณผ ๊ธฐ๋Šฅ์ ์œผ๋กœ ์™„์ „ํžˆ ๋™์ผํ•˜๊ณ ,
๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ›์•„ ๊ทธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ๋‹ค.

let func = function(a,b,c){
  console.log(this, a,b,c)
}

func.apply({a:1}, 2, 3, 4) //{a:1}, 2, 3, 4

3๏ธโƒฃ bind ๋ฉ”์„œ๋“œ

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

let user = {
  firstName: "John"
};

function func() {
  alert(this.firstName);
}

let funcUser = func.bind(user);
funcUser(); // John

์ถ”๊ฐ€์ ์œผ๋กœ bind ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•ด์„œ ์ƒˆ๋กœ ๋งŒ๋“  ํ•จ์ˆ˜๋Š” name ํ”„๋กœํผํ‹ฐ์— bound๋ผ๋Š” ์ ‘๋‘์–ด๊ฐ€ ๋ถ™๋Š”๋‹ค. -> ์ฝ”๋“œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ์— ๋” ์ˆ˜์›”ํ•ด์ง


โœ… ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ์˜ˆ์™ธ์‚ฌํ•ญ

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—๋Š” this๊ฐ€ ์•„์˜ˆ ์—†์œผ๋ฉฐ ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋ฉด ์Šค์ฝ”ํ”„์ฒด์ธ์ƒ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด this์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ๋ณ€์ˆ˜๋กœ this๋ฅผ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ call/apply/bind๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๋‹ค.

profile
๋ฉ‹์ฐ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž!

0๊ฐœ์˜ ๋Œ“๊ธ€