apply
- apply(this的指向,[函數的參數,以數組形式傳參])
- 如果第一個參數未null或者undefined,那么this默認指向window
- 此方法會將原函數立即執行,并且知識臨時改變一次this的指向
call
- call(this的指向,參數1,參數2,參數3......)
- 參數為參數列表形式,且必須一次性傳入所有參數
- 如果第一個參數未null或者undefined,那么this默認值指向window
- 此方法會將原函數立即執行,并且知識臨時改變一次this的指向
bind
- bind(this的指向,參數1,參數2,參數3......)
- 參數為參數列表形式,參數可以分批次傳入,最后函數執行的會將參數連在一起傳入
- 如果第一個參數未null或者undefined,那么this默認值指向window
- 此方法不會將原函數立即執行,他會返回一個永久改變this指向的函數
小結
- 相同點
- 都可以改變this的指向
- 當第一個參數為null或undefined時,this默認指向window
- 可以利用上一個特點求取一個數組中的最大值
var arr=[1,10,5,8,3,12];
//apply實現
console.log(Math.max.apply(null, arr)); //12
//call實現
console.log(Math.max.call(null,arr[0],arr[1],arr[2],arr[3],arr[4],arr[5])); //12
//bind實現
var max=Math.max.bind(null,arr[0],arr[1],arr[2],arr[3])
console.log(max(arr[4],max(arr[5])); //12,分兩次傳參
- 不同點
- apply和call會立即執行原函數,并且只是暫時改變this的指向
- bind不會立即執行原函數,而是返回一個永久改變this指向的函數