最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺出聊一聊js中的'this'關(guān)鍵字

 更新時間:2022年07月12日 15:04:58   作者:航航不脫發(fā)  
js中的this關(guān)鍵字平時在開發(fā)中使用時倒是也能正常應(yīng)用,但是對其使用和判斷并不能信手拈來,所以下面這篇文章主要給大家介紹了關(guān)于js中this關(guān)鍵字的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

在JavaScript中‘this’關(guān)鍵字是一個非常重要的概念,然而許多的初學(xué)者們發(fā)現(xiàn)深度的理解它卻又十分困難,如果你正在或者將要被this折磨,那么現(xiàn)在深呼吸放輕松點,你必須得知道實際上去理解‘this’這個關(guān)鍵字并不難;耐心的看完本文,相信你對‘this’會有更深的理解。下面我們將一起來討論‘this’關(guān)鍵字的工作原理。

什么是'this'關(guān)鍵字

'this'關(guān)鍵字是為每個執(zhí)行上下文(每個函數(shù))創(chuàng)建的一個特殊變量;所以一般來說,在使用'this'關(guān)鍵字的函數(shù)中,'this'永遠是取其所有者的值。換句話的意思就是它指向該函數(shù)的所有者。這樣聽起來很抽象吧,那么你現(xiàn)在只要記住'this'關(guān)鍵字的值不是靜態(tài)的,所以它總是不一樣。它的值取決于函數(shù)是怎么被調(diào)用的,只有在實際調(diào)用函數(shù)時才分配它的值。就比如我們將x=4;那么x的值就是4,但是'this'關(guān)鍵字的值取決于函數(shù)的調(diào)用方式;所以現(xiàn)在我們來分析四種不同的調(diào)用函數(shù)的方式。

四種方式---1.調(diào)用函數(shù)的第一種方法是:將函數(shù)作為一種方法

Example: this代表一個對象

const bruce={
    name:'bruce',
    birthYear:2001,
    calcAge:function () {
        return 2022-this.birthYear
    }
};
console.log(bruce.calcAge());//21`

在上面的bruce對象里面有一個calcAge()函數(shù),這個函數(shù)是一個被附加到了bruce對象里面的函數(shù)。所以當(dāng)我們調(diào)用一個方法的時候,calcAge()里面的this將會指向這個對象;換句話來說,this所指的bruce這個對象正在調(diào)用這個方法。在代碼的最后一行,我們調(diào)用了這個函數(shù);在calcAge()函數(shù)里面我們使用了this,那么這個this的值應(yīng)該是什么呢?沒錯,這個this指的是bruce;所以this.birrhYear==bruce.birthYear==2001。

四種方式---2.調(diào)用函數(shù)的第二種方法是: 簡單的調(diào)用函數(shù),不將函數(shù)作為方法,不附加到任何對象里面

Example: 此時this=undefined

const calcAge=function(birthYear){
    console.log(2022-birthYear);
    //查看此函數(shù)中的this
    console.log(this);
}
calcAge(2001)

結(jié)果如下:

像這樣常規(guī)的調(diào)用某個函數(shù),只是簡單的調(diào)用某個函數(shù),并沒有將這個函數(shù)添加到任何對象上面;可以這樣說這個this沒有主人,就是this指的就是window 。但是在嚴格模式下全局對象無法進行默認綁定,所以導(dǎo)致this只能綁定在undefined上。這就是this的默認綁定規(guī)則:

  • this所處的詞法作用域在哪里生效this就綁定在哪里。
  • 在嚴格模式下,全局對象無法進行默認綁定,所以導(dǎo)致this只能綁定在undefined上

四種方式---3.調(diào)用函數(shù)的第三種方法是:調(diào)用箭頭函數(shù)

箭頭函數(shù)沒有自己的this關(guān)鍵字

Example:

//3.箭頭函數(shù)的調(diào)用
const calcAge= birthYear => {
    console.log(2022-birthYear);
    //查看此函數(shù)中的this
    console.log(this);
}
calcAge()

執(zhí)行結(jié)果:

因為箭頭函數(shù)沒有this,所以在箭頭函數(shù)里面的this是它外層作用域里面的非箭頭函數(shù)的this,而本例中外層作用域是window,所以這里的this指的是window

四種方式---4.調(diào)用函數(shù)的第四種方式:該函數(shù)被調(diào)用作為事件監(jiān)聽器

那么此時的this將會指向處理程序函數(shù)所附加到的DOM元素

深入理解this指向的是調(diào)用該方法的對象

這就意味著this關(guān)鍵字不會簡單的指向在我們編寫方法的對象上面。

在第一種函數(shù)調(diào)用的方式中,因為bruce是調(diào)用calaAge()方法的對象,所以此時this是bruce; 那么現(xiàn)在創(chuàng)建一個新對象:

const lucy={
   birthYear:2006,
}

我們都知道函數(shù)只是一個值,所以我們可以這樣:

const lucy={
    birthYear:2006,
}
lucy.calcAge=bruce.calcAge
console.log(lucy);

結(jié)果:

現(xiàn)在lucy里面也有了一個calcAge()方法,我們再來執(zhí)行l(wèi)ucy.calcAge()

const lucy={
    birthYear:2006,
}
lucy.calcAge=bruce.calcAge
console.log(lucy);
lucy.calcAge()

結(jié)果為:

這就說明lucy對象調(diào)用calcAge()方法時,此時函數(shù)calcAge()方法里面的this指向的是lucy, 即調(diào)用該方法的對象。所以this關(guān)鍵字如上面所說,它不是靜態(tài)的,而是取決于函數(shù)的調(diào)用方式。

現(xiàn)在我們來定義一個常量y,并將bruce.calcAge()函數(shù)賦給它

const y=bruce.calcAge
y()

結(jié)果為:

那么此時y()只是作為一個普通函數(shù)來進行調(diào)用,this是window

小結(jié)

this關(guān)鍵字是一個讓許多初學(xué)者感到困惑的東西,但是總的來說:

1.如果函數(shù)是以普通函數(shù)(非構(gòu)造函數(shù))的形式調(diào)用,this指的永遠都是window

2.如果函數(shù)是以方法的形式調(diào)用,this就是調(diào)用方法的那個對象

總結(jié)

到此這篇關(guān)于js中this關(guān)鍵字的文章就介紹到這了,更多相關(guān)js中this關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ES6新特征數(shù)字、數(shù)組、字符串

    ES6新特征數(shù)字、數(shù)組、字符串

    這篇文章主要介紹了es6新特征之?dāng)?shù)字數(shù)組和字符串的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 小程序選項卡以及swiper套用(跨頁面)

    小程序選項卡以及swiper套用(跨頁面)

    這篇文章主要為大家詳細介紹了小程序選項卡以及swiper套用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • js內(nèi)存泄漏場景、如何監(jiān)控及分析詳解

    js內(nèi)存泄漏場景、如何監(jiān)控及分析詳解

    js內(nèi)存泄漏的含義就是當(dāng)已經(jīng)不需要某塊內(nèi)存時這塊內(nèi)存還存在著,垃圾回收機制就是間歇的不定期的尋找到不再使用的變量,并釋放掉它們所指向的內(nèi)存,這篇文章主要給大家介紹了關(guān)于js內(nèi)存泄漏場景、如何監(jiān)控及分析的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 一文詳解如何處理前端表單驗證確保用戶輸入合法

    一文詳解如何處理前端表單驗證確保用戶輸入合法

    這篇文章主要介紹了如何處理前端表單驗證確保用戶輸入合法的相關(guān)資料,并分享了最佳實踐和常見坑點,通過合理使用這些方法,可以構(gòu)建出健壯、友好的驗證系統(tǒng),文中給出了詳細的代碼示例,需要的朋友可以參考下
    2025-03-03
  • echarts實現(xiàn)3d柱狀圖的2種方式舉例

    echarts實現(xiàn)3d柱狀圖的2種方式舉例

    echarts3D效果柱狀圖的實現(xiàn),這個太難了,我花了兩天終于調(diào)成我想要的效果啦,要是官網(wǎng)上有例子就好了,太難調(diào)了,下面這篇文章主要給大家介紹了關(guān)于echarts實現(xiàn)3d柱狀圖的2種方式,需要的朋友可以參考下
    2023-02-02
  • js實現(xiàn)橫向百葉窗效果網(wǎng)頁切換動畫效果的方法

    js實現(xiàn)橫向百葉窗效果網(wǎng)頁切換動畫效果的方法

    這篇文章主要介紹了js實現(xiàn)橫向百葉窗效果網(wǎng)頁切換動畫效果的方法,實例分析了javascript實現(xiàn)百葉窗效果的技巧,需要的朋友可以參考下
    2015-03-03
  • livereload工具實現(xiàn)前端可視化開發(fā)【推薦】

    livereload工具實現(xiàn)前端可視化開發(fā)【推薦】

    本文將介紹一個工具--livereload。這是一款能根據(jù)你本地文件(html、css、js)的變化,自動跟蹤刷新瀏覽器的實時刷新工具,有了這個工具,會大大減輕你刷新頁面的工作量。下面跟著小編一起來看下吧
    2016-12-12
  • 利用css+原生js制作簡單的鐘表

    利用css+原生js制作簡單的鐘表

    這篇文章主要為大家詳細介紹了如何利用css+原生js制作簡單的鐘表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • js 編程筆記 無名函數(shù)

    js 編程筆記 無名函數(shù)

    無名函數(shù),其中一個作用可能是生成新的函數(shù)對象的引用,主要是用于定義。
    2011-06-06
  • Js的Array數(shù)組對象詳解

    Js的Array數(shù)組對象詳解

    這篇文章主要針對Js的Array數(shù)組對象為大家進行詳細的講解,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論

凉山| 丽水市| 马公市| 扶绥县| 林口县| 静安区| 大关县| 平顺县| 台中县| 浦东新区| 将乐县| 连山| 大渡口区| 定兴县| 宁海县| 清远市| 江口县| 通化市| 会宁县| 凉城县| 广宗县| 天峻县| 突泉县| 湘西| 柏乡县| 海城市| 海门市| 平泉县| 板桥市| 永丰县| 宜春市| 咸阳市| 桃源县| 宁化县| 达孜县| 青田县| 习水县| 金坛市| 武功县| 鄂伦春自治旗| 阜康市|