JS基礎(chǔ)知識(shí)-this

與其他語言相比,函數(shù)的 this 關(guān)鍵字在 JavaScript 中的表現(xiàn)略有不同,此外,在嚴(yán)格模式和非嚴(yán)格模式之間也會(huì)有一些差別。

在絕大多數(shù)情況下,函數(shù)的調(diào)用方式?jīng)Q定了this的值。所以導(dǎo)致了this使用場(chǎng)景非常之多,具體有哪些呢?

  1. 作為普通函數(shù)調(diào)用
  2. 使用call,bind,apply調(diào)用
  3. 多為對(duì)象方法被調(diào)用
  4. 在class中調(diào)用
  5. 箭頭函數(shù)

重點(diǎn)?。。。。?/h3>

this的取什么值是函數(shù)執(zhí)行的時(shí)候決定的,而不是函數(shù)在定義的確定的。
舉例說明

  • this在class中的調(diào)用
    function fn1() {
      console.log(this)
    }
    fn1()

此處的this指向windows,然后我們是用call改變一下this的指向再來看看this指向。

    fin1.call({ x: 100 })  // {x:100}

此時(shí),this的指向改為了傳入的對(duì)象。同樣的bind也可以改變this的指向。

    const fn2 = fn1.bind({ x: 200 })
    fn2()  // {x:200}

apply同樣也是可以的。

  1. bind改變this指針,直接運(yùn)行函數(shù),參數(shù)為依次傳入。
  2. bind改變this指針,返回一個(gè)函數(shù),參數(shù)是依次傳入。
    3.apply改變this指針,直接運(yùn)行函數(shù),參數(shù)必須為數(shù)組。
  • 作為對(duì)象方法被調(diào)用
    const zhangsan = {
      name: '張三',
      sayHi: function () {
        console.log(this)
      }
    }
    zhangsan.sayHi()  //{name: "張三", sayHi: ?}

  1. 此處的this指向?qū)ο髲埲?/li>
  • 在class中調(diào)用
    class Pepple {
      constructor(name) {
        this.name = name
      }
      sayHi() {
        console.log(this)
      }
    }
    const zhang = new Pepple('張三')
    zhang.sayHi() 
  1. 此處的this指向zhang的對(duì)象
  • 在箭頭函數(shù)中使用
    const zhangsan = {
      name: '張三',
      whit() {
        setTimeout(function () {
          console.log(this)
        }, 1000);
      },
      whit1() {
        setTimeout(() => {
          console.log(this)
        }, 1000);
      }
    }
    zhangsan.whit()  
    zhangsan.whit1()  
  1. 沒有使用箭頭函數(shù)指向了windows,使用了箭頭函數(shù)的指向了張三的對(duì)象
  2. 箭頭函數(shù)的this指向永遠(yuǎn)是上一級(jí)this的指向

至此,每個(gè)this的不同使用場(chǎng)景都已經(jīng)通過demo的形式展示完畢,要想真正的學(xué)懂this,那就需要聯(lián)合我們之前的class,作用域還有個(gè)人的練習(xí)。希望大家可以通過上述的案例中學(xué)到東西。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 1.概念 在JavaScript中,this 是指當(dāng)前函數(shù)中正在執(zhí)行的上下文環(huán)境,因?yàn)檫@門語言擁有四種不同的函數(shù)調(diào)...
    BluesCurry閱讀 1,236評(píng)論 0 2
  • 前言 面試官出很多考題,基本都會(huì)變著方式來考察this指向,看候選人對(duì)JS基礎(chǔ)知識(shí)是否扎實(shí)。讀者可以先拉到底部看總...
    若川i閱讀 1,177評(píng)論 0 10
  • 1. this之謎 在JavaScript中,this是當(dāng)前執(zhí)行函數(shù)的上下文。因?yàn)镴avaScript有4種不同的...
    百里少龍閱讀 1,092評(píng)論 0 3
  • JS中this的指向問題不同于其他語言,JS中的this不是指向定義它的位置,而是在哪里調(diào)用它就指向哪里。 JS中...
    艾薩克菊花閱讀 550評(píng)論 0 0
  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句,而且...
    道無虛閱讀 4,926評(píng)論 0 5

友情鏈接更多精彩內(nèi)容