call은 argument를 ,
로 연결해서 받는다.
apply는 argument를 array
형태로 받는다. (call과 apply는 기능적으로는 같다.)
bind는 this를 store 하게 된다. (bind는 미래에 function을 call할 때 쓰이게 된다. 예를들면 callback function으로)
function a() {
console.log('hi')
}
a.call() // a()와 같다.
const wizard = {
name: 'Cho',
health: 50,
heal(num1, num2) {
return this.health += num1 + num2;
}
}
const archer = {
name: 'Robin Hool',
health: 30,
}
// heal method를 archer가 빌려쓰려면 어떻게 해야할까?
wizard.heal.call(archer, 30, 70); // archer.health: 130
wizard.heal.apply(archer, [30, 70]); // archer.health: 230
const healArcher = wizard.heal.bind(archer, 30, 70);
healArcher(); // archer.health: 330
arguments를 일부만 bind하여, currying을 만들 수 있다.
const multiply = (a, b, c) => {
return a * b * c;
}
const multiplyByTwo = multiply.bind(this, 2);
multiplyByTwo(3, 4); // 24
const multiplyByTwoAndThree = multiply.bind(this, 2, 3);
multiplyByTwoAndThree(4); // 24