TIL

23/10/15 TIL __ .call() / .apply() / .bind()

GABOJOK 2023. 10. 15. 15:01

 

 

 

๐Ÿš—  this์˜ ๋ฐ”์ธ๋”ฉ 

 

1.     . call( )

  • .call() ์€ ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜ ์ด๋ฉด์„œ,  this์— ๊ฐ’์„ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ๋Š” ์• ๋‹ค. 
  • .call(this๊ฐ€ ์ฐธ์กฐ ํ•  ๋Œ€์ƒ, ํ•ด๋‹น ํ•จ์ˆ˜์— ๋„ฃ์„ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’)

 

ํ˜ธ์ถœ ์ฃผ์ฒด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ.

var func = function (a, b, c) {
  console.log(this, a, b, c); //{ x: 1 } 1 2 3
};

func.call({ x: 1 }, 1, 2, 3);

 

 

ํ˜ธ์ถœ ์ฃผ์ฒด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

var obje = {
  gogo: function (a) {
    console.log(this, a); 
  },
};

//this์— ๋ฐ”์ธ๋”ฉ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
obje.gogo(2); //obj๋‚ด๋ถ€์— ์žˆ๋Š” ์• ๋“ค ์ „์ฒด ํ˜ธ์ถœ { gogo: [Function: gogo], toto: [Function: toto] } 2

//this ๋ฐ”์ธ๋”ฉ ํ•œ ๊ฒฝ์šฐ
obje.gogo.call({ toto: 3 }, 2); //{ toto: 3 } 2

 

 

 

2.  . apply( )

  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž๋ฆฌ์— ๋„ฃ์„ ๊ฐ’๋“ค์„ ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์ค˜์•ผ๋งŒ ํ•œ๋‹ค.
  • .call() ๊ณผ ๋น„์Šทํ•˜๋‹ค. 

 

let obj4 = {
  a: 3,
  method: function (b, c) {
    console.log(this.a, b, c);
  },
};
obj4.method(7, 9); //3 7 9

obj4.method.apply({ a: 99 }, [7, 9]); //99 7 9

 

 

 

 

3.  . bind ( )

  • ์ฆ‰์‹œ์‹คํ–‰ํ•˜๋Š”  .call( ), .apply( )  ์™€๋Š” ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜์— this๋ฅผ ๋ฏธ๋ฆฌ ์ ์šฉํ•˜๊ณ , ์ดํ›„์— ์‹คํ–‰ํ•œ๋‹ค.  
  • ์ฆ‰์‹œ ์‹คํ–‰์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. 
  • ๋ถ€๋ถ„ ์ ์šฉ ํ•จ์ˆ˜
  • ๋ฐ”์ธ๋“œ ๋œ ์• ๋“ค์„ ์ถ”์ฒ™ํ•˜๊ธฐ ์ข‹์€ name ์†์„ฑ์ด ์žˆ๋‹ค.

 

let gu = function (a, b, c, d) {
  console.log(this, a, b, c, d);
};

//ํ•จ์ˆ˜์— this๋ฅผ ๋ฏธ๋ฆฌ ์ ์šฉ
let guBind = gu.bind({ e: "์• ์• " });
guBind("์ผ", "์ด", "์‚ผ", "์‚ฌ"); //{ e: '์• ์• ' } ์ผ ์ด ์‚ผ ์‚ฌ

//๋ถ€๋ถ„ ์ ์šฉ ํ•จ์ˆ˜
let guBind2 = gu.bind({ e: "์• ์• " }, 8, 0);
guBind2("์‚ผ", "์‚ฌ"); //{ e: '์• ์• ' } 8 0 ์‚ผ ์‚ฌ

//๋ฐ”์ธ๋“œ ๋œ ์• ๋“œ์„ ์ถ”์ ํ•˜๊ธฐ ์ข‹์€ name ์†์„ฑ์ด ์žˆ๋‹ค.
console.log(gu.name); //gu
console.log(guBind.name); //bound gu
console.log(guBind2.name); //bound gu