十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了JavaScript函數(shù)中this有哪些不同的指向,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
上下文和this關(guān)鍵字
在JavaScript中,函數(shù)有自己的執(zhí)行上下文,在這里要特別注意下函數(shù)的執(zhí)行上下文不是關(guān)于它是如何聲明的,也不是說函數(shù)的作用,而是關(guān)于如何在代碼中調(diào)用它,我們?cè)谡{(diào)用此執(zhí)行上下文時(shí)就會(huì)用到this。當(dāng)this從函數(shù)內(nèi)部訪問時(shí),實(shí)際上就是訪問其執(zhí)行上下文。
調(diào)用函數(shù)方式與this
上下文取決于函數(shù)的調(diào)用方式,我們可以通過4種不同的方式來調(diào)用上下文的函數(shù),因此this也有四種不同的指向
1. 一個(gè)基本的函數(shù)調(diào)用
2. 使用上下文對(duì)象調(diào)用函數(shù),也稱為隱式綁定。
3. 使用call()或調(diào)用函數(shù)apply(),也稱為顯式綁定。
4. 通過bind()方法綁定
基本函數(shù)調(diào)用
基本函數(shù)調(diào)用是調(diào)用函數(shù)的最簡(jiǎn)單方法
例:
在這個(gè)例子中可以看出student()是從全局范圍內(nèi)調(diào)用函數(shù),因此這里的this指代的是全局范圍,所以輸出結(jié)果為“”張三“”
隱式綁定
當(dāng)函數(shù)被一個(gè)對(duì)象“包含”的時(shí)候,我們稱函數(shù)的this被隱式綁定到這個(gè)對(duì)象里面了
obj函數(shù)雖然被放到對(duì)象里去但是并不會(huì)因?yàn)樗欢x在對(duì)象的內(nèi)部就會(huì)與外部產(chǎn)生區(qū)別,在隱式綁定下,obj通過this還是可以訪問到student對(duì)象中的a屬性
顯示綁定
可以使用call()或apply()方法調(diào)用函數(shù),其執(zhí)行上下文顯式綁定到對(duì)象,call和apply可以改變this指向
例:未使用call ()或者apply()時(shí)
利用call()使this指向window
bind()綁定
bind()會(huì)創(chuàng)建一個(gè)函數(shù),函數(shù)體內(nèi)的this對(duì)象的值會(huì)被綁定到傳入bind()第一個(gè)參數(shù)的值,但是bind不執(zhí)行函數(shù),只返回一個(gè)可供執(zhí)行的函數(shù)
通過bind方法將this指向c對(duì)象中的內(nèi)容。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享JavaScript函數(shù)中this有哪些不同的指向內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián)建站,詳細(xì)的解決方法等著你來學(xué)習(xí)!