apply()

apply() in frontend javascript book

apply ๋ฉ”์„œ๋“œ๋Š” ์†Œ์œ ์ž์ธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ this๋ฅผ ๋„˜๊ธฐ๋Š”๋ฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์†Œ์œ ์ž ํ•จ์ˆ˜์— ๋„˜๊ธธ this์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด์„ ๋ฐ›๋Š”๋‹ค.

  • 2๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” Array์˜ ์ธ์Šคํ„ด์Šค or arguments ๊ฐ์ฒด

  function sum(num1, num2){
    return num1 + num2;
  }

  function callSum1(num1, num2){
    return sum.apply(this, arguments);
  }
  function callSum2(num1, num2){
    return sum.apply(this, [num1, num2]);
  }

  console.log(callSum1(10,10)); // 20
  console.log(callSum2(10,10));
  • callSum1์€ ์ž์‹ ์˜ this์™€ arguments ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊น€

  • callSum2๋Š” arguments ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด์„ ๋„˜๊น€

apply() in opentutorial.org

ํ•จ์ˆ˜.apply()

Ex function sum (arg1, arg2) { return arg1+arg2; }

sum.apply // function apply() { [native code]} // apply๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜๋ผ ๋…ธ์ถœ ์•ˆ๋จ

์•„๋ž˜ 2์ค„์€ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค.

sum.apply(null, [1,2]) sum(1,2)

์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด null์— ๋‹ค๋ฅธ๊ฑธ ๋„ฃ์–ด๋ณด์ž

WHY?

Ex

o1 = {val1:1, val2:2, val3:3} o2 = {v1:10, v2:50, v3:100, v4:25} function sum(){ var sum = 0; for (name in this) { sum += this[name]; } return _ sum; } alert(sum.apply(o1)); alert(sum.apply(o2));

sum์€ for in ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ž์‹ (this)์˜ ๊ฐ’์„ ์—ด๊ฑฐํ•œ ํ›„์— ๊ฐ ์†์„ฑ์˜ ๊ฐ’์„ ์ง€์—ญ๋ณ€์ˆ˜ _ sum์— ์ €์žฅ ํ›„ ๋ฆฌํ„ดํ•˜๊ณ  ์žˆ๋‹ค.

๊ฐ์ฒด function์˜ ๋ฉ”์†Œ๋“œ apply์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋งฅ๋ฝ์ด๋‹ค. sum.apply(o1)์€ ํ•จ์ˆ˜ sum์„ ๊ฐ์ฒด o1์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค๊ณ  sum์„ ํ˜ธ์ถœํ•œ ํ›„ sum์„ ์‚ญ์ œํ•œ๋‹ค. ์•„๋ž˜์™€ ๋น„์Šทํ•˜๋‹ค

o1 = {val1:1, val2:2, val3:3, sum:sum} o1 = {val1:10, val2:50, val3:100, v4:25 sum:sum}

alert(o1.sum()); alert(o2.sum());

// ๊ทผ๋ฐ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ์™œ๋ƒ๋ฉด o1์˜ ๋งˆ์ง€๋ง‰ ์†์„ฑ์ด for in ๋ฌธ์— ๋“ค์–ด๊ฐ„๋‹ค. this[name]์˜ typeof ๊ฐ€ function์ด๋ฉด ์ธ์— ์•ˆ๋”ํ•˜๋ฉด ๋œ๋‹ค.

Summary

  • ํ•จ์ˆ˜ sum์—์„œ this์˜ ๊ฐ’์ด ์ „์—ญ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ o1์ด ๋œ๋‹ค๋Š” ์˜๋ฏธ

  • ์ผ๋ฐ˜์ ์ธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ์†Œ์†๋œ ํ•จ์ˆ˜๋Š” ๊ทธ ๊ฐ์ฒด์˜ ์†Œ์œ ๋ฌผ ์ด ๋จ

  • ํ•˜์ง€๋งŒ JS ์—์„œ๋Š” ํ•จ์ˆ˜๋Š” ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด ๋กœ ์กด์žฌ, apply ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์†Œ์œ ๋ฌผ์ธ ๊ฒƒ์ฒ˜๋Ÿฌ ใ…์‹คํ–‰ ๊ฐ€๋Šฅ

  • apply์˜ ์ฒซ์งธ ์ธ์ž๋กœ null ์ „๋‹ฌ์‹œ apply๊ฐ€ ์‹คํ–‰๋œ ํ•จ์ˆ˜ ์ธ์Šคํ„ด์Šค๋Š” ์ „์—ญ๊ฐ์ฒด(๋ธŒ๋ผ

    ์šฐ์ €์—์„œ๋Š” window)๋ฅผ ๋งฅ๋ฝ์œผ๋กœ ์‹คํ–‰

Last updated

Was this helpful?