<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試系列:改變this指向的方法有哪些?

          共 1237字,需瀏覽 3分鐘

           ·

          2022-01-23 11:28

          ????關(guān)注后回復(fù)?“進(jìn)群”?,拉你進(jìn)程序員交流群????

          來源丨幽默gif圖

          大家好,我是前端發(fā)現(xiàn)者,一名有一丟丟代碼強(qiáng)迫癥的前端代碼仔,喜歡的朋友可以點(diǎn)個(gè)關(guān)注,一起踩坑前端知識(shí)。

          面試官:說說改變this的指向有哪些方法?

          聽到這個(gè)問題我首先想到的是小程序經(jīng)常用的 let that = this 這句代碼,著實(shí)有點(diǎn)菜哈?!拔抑肋@個(gè)肯定不是,所以沒有跟面試官說這個(gè)答案”。然后我思前想后說了一個(gè):“閉包算嗎?”,“閉包應(yīng)該不算”面試官有點(diǎn)尷尬的答道。最后面試官為了緩解尷尬,提醒了我說call、applybind用過嗎?顯然我平時(shí)沒怎么用過它們。

          今天就來總結(jié)下這三個(gè)改變this的用法吧!

          bind方式

          @參數(shù)說明

          • 第一個(gè)參數(shù):改變this指向
          • 第二個(gè)參數(shù)之后:實(shí)參
          • 結(jié)果:返回值為一個(gè)新的函數(shù)使用的時(shí)候
          • 使用:需要手動(dòng)調(diào)用下返回的新函數(shù)(不會(huì)自動(dòng)執(zhí)行)
          function?fn(a,?b,?c)?{
          ??console.log(this,?a?+?b?+?c)
          }
          fn(1,?2,?3)?//?window?6
          let?newFn?=?fn.bind('小明',?1,?2,?3)
          newFn()?//?小明?6

          call方式

          @參數(shù)說明

          • 第一個(gè)參數(shù):改變this指向
          • 第二個(gè)參數(shù)之后:實(shí)參
          • 使用之后會(huì)自動(dòng)執(zhí)行該函數(shù)(無需手動(dòng)調(diào)用)
          function?fn(a,b,c){
          ??console.log(this,a+b+c)
          }
          fn(1,2,3)?//?window?6
          fn.call('小紅',1,2,3)??//小紅?6

          apply方式

          @參數(shù)說明

          • 第一個(gè)參數(shù):改變this指向
          • 第二個(gè)參數(shù):數(shù)組(里面為實(shí)參,且總共只有2個(gè)參數(shù))
          • 使用之后會(huì)自動(dòng)執(zhí)行該函數(shù)(無需手動(dòng)調(diào)用)
          function?fn(a,b,c){
          ??console.log(this,a+b+c)
          }
          fn(1,2,3)?//?window?6
          fn.apply('張三',[1,2,3])?//?張三?6

          總結(jié)

          「相同點(diǎn)」

          • 都可以改變函數(shù)內(nèi)部的this指向。

          「不同點(diǎn)」

          • call、apply會(huì)自動(dòng)調(diào)用函數(shù),bind需要手動(dòng)調(diào)用。
          • call、bind有無數(shù)個(gè)參數(shù),apply只有2個(gè)參數(shù),且第二個(gè)參數(shù)必須為數(shù)組。

          「使用場景」

          • call 經(jīng)常做繼承。
          • apply 經(jīng)常跟數(shù)組有關(guān)系。比如借助數(shù)學(xué)對(duì)象實(shí)現(xiàn)數(shù)組最大值最小值
          • bind 不調(diào)用函數(shù),但是還想改變this指向時(shí)。比如改變定時(shí)器內(nèi)部的this指向。

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?面試題?資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          點(diǎn)擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點(diǎn)這里好文分享給更多人↓↓

          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人麻豆伊人 | 精品欧美日韩一区二区三区播放 | 天天激情五月 | 成人操人在线播放 | 日日综合网 |