call、apply、bind三者為改變this指向的方法。
共同點:第一個參數都為改變this的指針。若第一參數為null/undefined,this默認指向window
call(無數個參數)
- 第一個參數:改變this指向
- 第二個參數:實參
- 使用之后會自動執行該函數
function fn(a,b,c){ console.log(this,a+b+c); // this指向window } fn(); fn.call(document,1,2,3);//call改變之后this指向document //輸出 #document 6 1,2,3是實參 結果相加為6
apply(兩個參數)
- 第一個參數:改變this指向
- 第二個參數:數組(里面為實參)
- 使用時候會自動執行函數
function fn(a,b,c){ console.log(this,a+b+c); } fn(); fn.apply(document,[1,2,3]);
bind(無數個參數)
- 第一個參數:改變this指向
- 第二個參數之后:實參
- 返回值為一個新的函數
- 使用的時候需要手動調用下返回 的新函數(不會自動執行)
function fn(a,b,c){ console.log(this,a+b+c); //window } let ff = fn.bind('小明',1,2,3); //手動調用一下
call、apply與bind區別:前兩個可以自動執行,bind不會自動執行,需要手動調用
call、bind與apply區別:前兩個都有無數個參數,apply只有兩個參數,而且第二個參數為數組