bindとは
thisの参照先のオブジェクトや引数を指定できる。第一引数にthis参照先オブジェクト、第二引数以降は、関数に渡ってくる引数の値を入れられる。
callとは
bindのようにthisや引数の参照先を変更できる。同時に関数を実行する。第二引数以降は、関数の引数の値を入れられる点もbindと同様。つまりcallとbindの違いはその場で実行されるかされないかのみ。
applyとは
bindのようにthisや引数の参照先を変更できるが、同時に関数を実行する。第二引数に設定するのは配列。配列に渡された値が展開されて、関数の仮引数に渡っていく。
サンプルコード
script.js
function a(name,name2) {
console.log('hello' + name + ' ' + name2);
}
//束縛したいオブジェクト
const tim = {
key: 'value'
}
const b = a.bind(tim, 'Tim', 'Bob');
b(); //bindを使ってthis参照先オブジェクトを束縛した場合は、このように関数式などに代入し、それを実行する必要がある。
a.call(tim, 'Tim', 'Bob'); //callを使って束縛した場合は、実行まで行われる。
a.apply(tim,['Tim','Bob']); //applyを使って束縛した場合は、実行まで行われる。引数は配列