改變this指向的三種方法

改變this指向的三種方式

call、apply、bind三者為改變this指向的方法。
共同點:第一個參數(shù)都為改變this的指針。若第一參數(shù)為null/undefined,this默認指向window

1.call(無數(shù)個參數(shù))

  • 第一個參數(shù):改變this指向
  • 第二個參數(shù):實參
  • 使用之后會自動執(zhí)行該函數(shù)
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

2.apply(兩個參數(shù))

  • 第一個參數(shù):改變this指向
  • 第二個參數(shù):數(shù)組(里面為實參)
  • 使用時候會自動執(zhí)行函數(shù)
function fn(a,b,c){
        console.log(this,a+b+c); 
    }
    fn();
    fn.apply(document,[1,2,3]);

3.bind(無數(shù)個參數(shù))

  • 第一個參數(shù):改變this指向
  • 第二個參數(shù)之后:實參
  • 返回值為一個新的函數(shù)
  • 使用的時候需要手動調用下返回 的新函數(shù)(不會自動執(zhí)行)
function fn(a,b,c){
    console.log(this,a+b+c); //window
}
let ff = fn.bind('小明',1,2,3); //手動調用一下

4、call、apply、bind相同點以及不同點

(1)相同點:

都可以改變函數(shù)內部的this指向

(2)區(qū)別:

call和apply會調用函數(shù),并且改變函數(shù)的內部的this指向;

call和apply參數(shù)參數(shù)的方式是不一樣的,call參數(shù)是以羅列的方式傳遞,apply參數(shù)是以數(shù)組的方式傳遞;

bind不會調用函數(shù),可以改變函數(shù)內部this指向;

5、各自的應用場景

call經(jīng)常做繼承;

apply經(jīng)常與數(shù)組有關;

bind不調用函數(shù),但是可以改變this的指向,比如改變定時器內部this的指向;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容