MDN_Function.prototype.call() >
MDN_Function.prototype.apply() >
MDN_Function.prototype.bind() >
1. call() : ํจ์ ํธ์ถ
์ฃผ์ด์ง this ๊ฐ ๋ฐ ๊ฐ๊ฐ ์ ๋ฌ๋ ์ธ์์ ํจ๊ป ํจ์๋ฅผ ํธ์ถํ๋ค.
function getTotal(one, two){
return one + two;
}
let result = getTotal.call(this, 10, 20);
log(result); //30
call() ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ ํธ์ถ๋ ํจ์์์ this๋ก ์ฐธ์กฐํ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค. ์ผ๋ฐ์ ์ผ๋ก this๋ฅผ ์ฌ์ฉํ์ง๋ง, ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ก๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
let value = {one: 10, two: 20};
function getTotal(){
return this.one + this.two;
}
let result = getTotal.call(value);
log(result); //30
2. apply() : ํจ์ ํธ์ถ, ๋ฐฐ์ด์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ
์ฃผ์ด์ง this ๊ฐ๊ณผ ๋ฐฐ์ด(๋๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด)๋ก ์ ๊ณต๋๋ arguments๋ก ํจ์๋ฅผ ํธ์ถํ๋ค.
- call()์ ํจ์์ ์ ๋ฌ๋ ์ธ์๋ฆฌ์คํธ๋ฅผ ๋ฐ์ง๋ง, apply()๋ ์ธ์๋ค์ ๋จ์ผ ๋ฐฐ์ด์ ๋ฐ๋๋ค.
- ํ๋ผ๋ฏธํฐ ์๊ฐ ์ ๋์ ์ผ ๋ ์ฌ์ฉํ๋ค.
function getTotal(one, two){
return one + two;
}
let result = getTotal.appply(this, [10, 20]);
log(result); //30
3. bind() : ์๋ก์ด ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ํจ์ ์คํ
bind() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์๋ก์ด ํจ์๋ฅผ ์์ฑํ๋ค. ๋ฐ๊ฒ๋๋ ์ฒซ ์ธ์์ ๊ฐ์ผ๋ก๋ thisํค์๋๋ฅผ ์ค์ ํ๊ณ , ๋ค์ ์ธ์๋ค์ ๋ฐ์ธ๋๋ ํจ์์ ์ธ์์ ์ ๊ณต๋๋ค.
let value = {one: 10, two: 20};
function getTotal(){
return this.one + this.two;
}
//getTotal์ด ์ทจ์ง์ ๋ง๊ฒ ๋ฌ๋ผ์ง ์๋ก์ด ValueTotalํจ์ ์์ฑ
let ValueTotal = getTotal.bind(value);
console.log(ValueTotal) // 30
'๐ฐ ์ธ์ด > JS - ๋น๊ธฐ๋ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ES6 - class (0) | 2021.05.25 |
---|---|
for()๊ณผ forEach() (0) | 2021.05.24 |
์ค๋ธ์ ํธ ํ๋กํ ํ์ (0) | 2021.05.23 |
new ์ฐ์ฐ์ (0) | 2021.05.17 |
๋ฐ์ดํฐ ํ์ (0) | 2021.05.17 |