国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

淺談js中的this問(wèn)題

2024-05-06 15:12:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

this

this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰(shuí),實(shí)際上

this的最終指向的是那個(gè)調(diào)用它的對(duì)象(這里其實(shí)并不完全對(duì),this的指向有時(shí)候會(huì)很微妙,得靠自己去慢慢體會(huì))

只有方法在對(duì)象上,對(duì)象調(diào)用當(dāng)前方法,指向當(dāng)前對(duì)象

function fnThis(){ let user='js'; console.log(this.user)//undefined console.log(this)//global(window)}fnThis();

這里為什么會(huì)輸出一個(gè)全局的對(duì)象?因?yàn)槲覀兩昝鞯暮瘮?shù),在全局里,現(xiàn)在執(zhí)行這個(gè)函數(shù)

實(shí)際上是全局在調(diào)用

let obj={ user:'js', fn:function(){ console.log(this.user) }obj.fn();

這里是obj在調(diào)用,所以指向我們的obj,這并不能說(shuō)明,我們一開(kāi)始就說(shuō)的this最終調(diào)用他的那個(gè)

對(duì)象

let obj={ user:'js', objTwo:{ user:'css', fn:function(){  console.log(this.user) } }}obj.objTwo.fn();

這里只是指向了obj2,而并沒(méi)有指向最終調(diào)用它的obj.

來(lái)個(gè)料咋們看看this這家伙

<button id="myBtn" value="按鈕">按鈕</button><script>let myBtn=document.querySelector("#myBtn")let fn=function(){  console.log(this);}myBtn.onclick=function(){  fn();//輸出的全局  console.log(this);//輸出的是這個(gè)button}</script>

這里從表面看,會(huì)認(rèn)為第一個(gè)輸出的是這個(gè)btn按鈕,不是說(shuō)誰(shuí)調(diào)用指向誰(shuí)么,但是咋們仔細(xì)看這個(gè)是btn在調(diào)用么???

其實(shí)是這個(gè)點(diǎn)擊事件的匿名函數(shù)在調(diào)用,而這fn()本身是全局上下文的函數(shù),它的this指向的是全局,它是作為這個(gè)匿名函數(shù)的普通函數(shù),自然指向的全局

我們?nèi)绻@樣寫

myBtn.onclick=fn;//btn點(diǎn)擊的時(shí)候就指向這個(gè)btn了,這時(shí)候輸出結(jié)果為這個(gè)button,

總結(jié)

1. 全局上下文,或者普通函數(shù)上下文里面的this,包括函數(shù)里面的普通函數(shù),都是指向全局
2. 在對(duì)象方法里面的this指向該對(duì)象
3. 在事件方法里面的this指向發(fā)生事件的這個(gè)對(duì)象

特殊情況

let obj={ user:'js', objTwo:{ user:'css', fn:function(){  console.log(this.user)  console.log(this) } }}let objThre=obj.objTwo.fn;objThree();

把函數(shù)賦值給了objThree,而objThree是在全局上,所以輸出的是全局

補(bǔ)充

let chinesePeople=function(){ this.name='張飛'; return obj }

如果返回的是對(duì)象,this就指向返回的那個(gè)對(duì)象,否則就指向?qū)嵗龑?duì)象

改變的幾種方式

let obj={a:80}let objTwo={ a:70, fn:function(){  console.log(this.a); }}

objTwo.fn.call(obj);
調(diào)用一個(gè)方法,并改變其this指向

objTwo.fn.apply(obj);
調(diào)用一個(gè)方法,并改變其this指向

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 营山县| 八宿县| 库车县| 遂宁市| 南华县| 东乡| 关岭| 锦州市| 咸阳市| 益阳市| 兰州市| 遂溪县| 门源| 维西| 唐海县| 淮北市| 宁明县| 吴堡县| 沐川县| 五大连池市| 同德县| 台东市| 永昌县| 西乌珠穆沁旗| 栾川县| 丹江口市| 松滋市| 武安市| 龙江县| 伊宁市| 拜泉县| 五常市| 西华县| 安龙县| 保亭| 荥经县| 黄梅县| 额济纳旗| 东城区| 洪湖市| 九龙坡区|