Skip to content

Latest commit

ย 

History

History
71 lines (57 loc) ยท 2.91 KB

File metadata and controls

71 lines (57 loc) ยท 2.91 KB

this

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•ด๋‹น ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ this์— ๋ฐ”์ธ๋”ฉ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ์ฆ‰, ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ this์— ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ์ •์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ this์— ๋ฐ”์ธ๋”ฉํ•  ๊ฐ์ฒด๊ฐ€ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.


this์˜ ๊ทœ์น™

  1. ์ „์—ญ ๊ณต๊ฐ„์—์„œ์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  2. ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ์„œ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ, this๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ฃผ์ฒด(๋ฉ”์„œ๋“œ๋ช… ์•ž์˜ ๊ฐ์ฒด)๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  3. ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ, this๋Š” ์ „์—ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ๋„ ๊ฐ™๋‹ค.
  4. ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ์˜ this๋Š” ํ•ด๋‹น ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ๋ฐ›์€ ํ•จ์ˆ˜๊ฐ€ ์ •์˜ํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉฐ, ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ „์—ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  5. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ์˜ this๋Š” ์ƒ์„ฑ๋  ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  6. apply, call, bind๊ฐ€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ/์ƒ์„ฑ์— ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ, ํ•จ์ˆ˜ ๋‚ด์˜ this๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด์ด๋‹ค.

2๋ฒˆ ๊ทœ์น™

๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

var obj = {
  name: 'obj name',
  print: function p() { console.log(this.name); }
};
obj.print(); // obj name

5๋ฒˆ ๊ทœ์น™

new๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด๋กœ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

var name = "global";
function Func() {
  this.name = "Func";
  this.print = function f() { console.log(this.name); };
}
var a = new Func();
a.print(); // Func

์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ this์˜ ์ฐจ์ด

์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ this๋Š” ์ „์—ญ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ๋˜๊ณ , ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ์ ์—์„œ ์ฃผ๋ณ€ ์Šค์ฝ”ํ”„์˜ this ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” this๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ช…์‹œ์  this ๋ฐ”์ธ๋”ฉ

call ๋ฉ”์„œ๋“œ

  • ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ ์ฃผ์ฒด์ธ ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๋ช…๋ น
  • ์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ this๋กœ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ์ดํ›„์˜ ์ธ์ž๋“ค์„ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•œ๋‹ค.

apply ๋ฉ”์„œ๋“œ

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

bind ๋ฉ”์„œ๋“œ

  • call๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ํ˜ธ์ถœํ•˜์ง€๋Š” ์•Š๊ณ  ๋„˜๊ฒจ๋ฐ›์€ this ๋ฐ ์ธ์ˆ˜๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋งŒ ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • ๋‹ค์‹œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ˆ˜๋ฅผ ๋„˜๊ธฐ๋ฉด, ๊ทธ ์ธ์ˆ˜๋“ค์€ ๊ธฐ์กด bind ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌํ–ˆ๋˜ ์ธ์ˆ˜๋“ค์˜ ๋’ค์— ์ด์–ด์„œ ๋“ฑ๋ก๋œ๋‹ค.
function func() {
  console.log(this.name);
}

var obj = { name: 'obj name' };
func.call(obj); // obj name
func.apply(obj); // obj name
(func.bind(obj))(); // obj name

์ฐธ๊ณ 

  • ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ (์ฑ…)