IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
JavaScript中this的存在為我們寫代碼提供了非常多的幫助,但是在具體使用的時(shí)候this的具體指向會變得各不相同,在本篇文章中,我們將詳細(xì)討論this的指向機(jī)制。
首先我們要明確一個(gè)概念,this既不是指向當(dāng)前函數(shù),也不是某個(gè)固定的對象,而是函數(shù)在執(zhí)行時(shí)的環(huán)境對象。也就是是說,函數(shù)內(nèi)this的指向只和函數(shù)是如何被調(diào)用的有關(guān),和函數(shù)的定義方式以及位置等沒有必然的聯(lián)系。
1. 最普通的函數(shù)調(diào)用
上述案例中,我們可以認(rèn)為全局函數(shù)demo是頂層對象window的方法,所以可以認(rèn)為是window在調(diào)用demo函數(shù),所以其中的this指向的是window對象。
- function demo(){
- console.log(this);
- }
- demo();
2. 對象方法中的this
在上面這個(gè)案例中,執(zhí)行的雖然也是demo函數(shù),但是在我們是通過obj對象對demo函數(shù)的引用訪問到demo函數(shù)的,所以可以認(rèn)為是obj對象在調(diào)用函數(shù)demo,函數(shù)內(nèi)this的this就要指向obj對象。
- function demo(){
- console.log(this);
- }
- var obj = {
- foo:demo
- }
- obj.foo();
3. 定時(shí)器中的this
在第一個(gè)定時(shí)器中,通過定時(shí)器執(zhí)行函數(shù)demo時(shí),可以依然認(rèn)為demo是全局對象window的方法,所以是window對象在調(diào)用demo函數(shù),所以this依然指向window。而第二個(gè)定時(shí)器中是一個(gè)匿名函數(shù),一般匿名函數(shù)的執(zhí)行具有全局性,也就是可以認(rèn)為匿名函數(shù)是是在全局環(huán)境中被調(diào)用的,那么該定時(shí)器函數(shù)內(nèi)的this就指向了全局環(huán)境對象window。
- function demo(){
- console.log(this);
- }
- setTimeout(demo,1000);
- setTimeout(function(){
- console.log(this);
- },2000);
>>本文地址:http://m.nfbqydst.cn/zhuanye/2020/48500.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?