1. <dd id="jcnig"><nav id="jcnig"><delect id="jcnig"></delect></nav></dd>
      <dfn id="jcnig"><tt id="jcnig"><sup id="jcnig"></sup></tt></dfn>

    2. <cite id="jcnig"></cite>
      <cite id="jcnig"><tt id="jcnig"></tt></cite>

      <address id="jcnig"><nav id="jcnig"></nav></address>
    3. <address id="jcnig"><nav id="jcnig"></nav></address>
      400-650-7353

      精品課程

      您所在的位置:首頁 > IT干貨資料 > web前端 > 【Web前端基礎知識】call和apply的作用

      【Web前端基礎知識】call和apply的作用

      • 發布: Web前端培訓
      • 來源:
      • 2021-07-26 15:31:02
      • 閱讀()
      • 分享
      • 手機端入口

      this 在不同的地方有不同的含義:

      1. 在事件處理函數中,this指向觸發函數的對象;

      2. 在普通函數中,this指向window;

      3. 當作函數作為某個對象的方法調用時,this指向那個對象;

      4. 在構造函數中this指向當前實例化對象;

      【Web前端基礎知識】call和apply的作用

      當在一些情況中我們想要更改this的指向,這里就可以使用 call 與 apply 來改變 this 的指向,讓 this 指向特定的對象。

      call 與 apply 的作用都是改變 this 的指向,基本的操作都是一樣的。其使用方法如下:

      call(this指向,參數1,參數2...)

      apply(this指向,[參數1,參數2...])

      可以看到他們的傳參方式是不一樣的。想要修改this 的指向,那么必然有一個this修改后的指向,而函數必然后關系到傳參問題:call方法可以傳給該函數的參數分別作為自己的多個參數,而apply方法必須將傳給該函數的參數合并成一個數組作為自己的一個參數。

      1. function sum(a,b){ 
      2. console.log(a+b);     // 30 
      3.        console.log(this);  // 原本指向window,現在指向sum了 
      4. sum.call(sum,10,20) 

      通過使用call方法,使得sum函數中原本指向window的this現在指向了sum自身,當然this的指向自己想指向哪里都可以。

      另外還可以改變對象的this

      1. var obj1 = { 
      2.     "name":"韓梅梅", 
      3.     "getName":function(){ 
      4.         console.log(this.name); 
      5.     } 
      6. obj2 = { 
      7.     "name":"李雷" 
      8. obj1.getName();         // 韓梅梅 
      9. obj1.getName.call(obj2);// 李雷 

      可以看到在obj1第一次調用getName方法時,結果為韓梅梅,因為調用getName時this指向obj1自身。在第二次調用getName方法時,使用了call方法改變了this的指向,讓this指向了obj2,故打印時this.name成了obj2.name,為李雷。

      改變this一般用于借用別的對象的方法,當想使用某個自己沒有而別的對象有的方法時,就可以通過改變this的指向來借用別對象的方法。如:

      1. var n = {};  
      2. console.log(n.toString()); // [object Object]  
      3. // 對象的toString方法可以獲取數據的具體類型,若是也想獲取數組的具體數據類型可以借用對象的該方法。 
      4. console.log(Object.prototype.toString.call([]));    // [object Array] 

      apply的使用和call的使用方式是一樣的,只是在于向函數傳參時是以一個數組的形式,就如上面例子中使用call改變函數sum的指向時,若是使用apply則為:sum.apply(sum,[10,20]),第一個為改變后的this指向,第二個參數為數組,若在進行傳參時第二個參數的格式不對,會報錯。

      apply的巧妙用法:

      使用Math.max可以得到數組中最大的一項

      因為Math.max不支持Math.max([參數1,參數2...])也就是數組,但是它支持Math.max (參數1,參數2...)的形式,所以可以根據apply的特點來解決這個問題,因為剛好apply的第二個參數為一個數組,可以將這個數組作為apply的第二個參數傳入,這樣apply會將一個數組轉換為一個參數接一個參數的方式傳遞給方法。

      1. var arr = [6,3,8,9,12,5] 
      2. console.log(Math.max.apply(1,arr)); // 12 

      這樣就輕易的可以得到一個數組中的最大項。

      這塊在調用的時候第一個參數給了1,這是因為沒有對象去調用這個方法,我只需要用這個方法幫我運算,得到返回的結果就行,所以直接傳遞了一個1過去。用這種方法也可以實現得到數組中的最小項:Math.min.apply(1,array)

      學習疑問申請解答
      您的姓名
      您的電話
      意向課程
       

      中公優就業

      IT小助手

      掃描上方二維碼添加好友,請備注:599,享學習福利。

      >>本文地址:
      注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

      推薦閱讀

      優就業:ujiuye

      關注中公優就業官方微信

      • 關注微信回復關鍵詞“大禮包”,享學習福利
      QQ交流群
      在線疑問解答
      (加群備注“網站”)
      IT培訓交流群 加入群聊 +
      軟件測試 加入群聊 +
      全鏈路UI/UE設計 加入群聊 +
      Python+人工智能 加入群聊 +
      互聯網營銷 加入群聊 +
      Java開發 加入群聊 +
      PHP開發 加入群聊 +
      VR/AR游戲開發 加入群聊 +
      大前端 加入群聊 +
      大數據 加入群聊 +
      Linux云計算 加入群聊 +
      優就業官方微信
      掃碼回復關鍵詞“大禮包”
      享學習福利

      測一測
      你適合學哪門IT技術?

      1 您的年齡

      2 您的學歷

      3 您更想做哪個方向的工作?

      獲取測試結果
       
      課程資料、活動優惠 領取通道
       
       
      日本一本二本三本av网站,一本加勒比HEZYO东京热高清,一本久久A久久精品综合