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์ ๋ค๋ฅธ๊ฑธ ๋ฃ์ด๋ณด์
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์ด๋ฉด ์ธ์ ์๋ํ๋ฉด ๋๋ค.
ํจ์ sum์์ this์ ๊ฐ์ด ์ ์ญ๊ฐ์ฒด๊ฐ ์๋๋ผ o1์ด ๋๋ค๋ ์๋ฏธ
์ผ๋ฐ์ ์ธ ๊ฐ์ฒด์งํฅ ์ธ์ด์์ ํ๋์ ๊ฐ์ฒด์ ์์๋ ํจ์๋ ๊ทธ ๊ฐ์ฒด์ ์์ ๋ฌผ ์ด ๋จ
ํ์ง๋ง JS ์์๋ ํจ์๋ ๋
๋ฆฝ์ ์ธ ๊ฐ์ฒด ๋ก ์กด์ฌ, apply ๋ฉ์๋๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ ๋ฌผ์ธ ๊ฒ์ฒ๋ฌ ใ
์คํ ๊ฐ๋ฅ
apply์ ์ฒซ์งธ ์ธ์๋ก null ์ ๋ฌ์ apply๊ฐ ์คํ๋ ํจ์ ์ธ์คํด์ค๋ ์ ์ญ๊ฐ์ฒด(๋ธ๋ผ
์ฐ์ ์์๋ window)๋ฅผ ๋งฅ๋ฝ์ผ๋ก ์คํ