日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解JavaScript中的this指向問(wèn)題

瀏覽:227日期:2023-10-04 15:41:01
題記

JS中的this指向一直是個(gè)讓初學(xué)者頭疼的問(wèn)題。今天,我們就一起來(lái)瞅瞅this倒地是咋回事,詳細(xì)說(shuō)說(shuō)this指向原則,從此不再為了this指向操碎了心。

開(kāi)篇

首先我們都知道this是Javascript語(yǔ)言的一個(gè)關(guān)鍵字。

它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用。隨著函數(shù)使用場(chǎng)合的不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰(shuí),實(shí)際上this的最終指向的是那個(gè)調(diào)用它所在函數(shù)的對(duì)象。 那么接下來(lái)我們一步步探索下這個(gè)問(wèn)題。

探索一

function a() { var user = '清蒸胖頭魚(yú)'; console.log(this.name); //undefined console.log(this); //Window } a(); window.a();//兩種結(jié)果相同

如我們上文所說(shuō)的this的最終指向的是那個(gè)調(diào)用它所在函數(shù)的對(duì)象,這里a其實(shí)是由window對(duì)象點(diǎn)出來(lái)的。

探索二

var obj = { name: ’清蒸胖頭魚(yú)’, f1: function () { console.log(this.name);//清蒸胖頭魚(yú) } }; obj.f1();

再次強(qiáng)調(diào)一點(diǎn)this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰(shuí);這個(gè)例子this所在的f1函數(shù)是由obj對(duì)象調(diào)用的,所以這里的this指向obj對(duì)象。

探索三

如果要徹底的搞懂this必須看接下來(lái)的幾個(gè)例子

var obj = { a: 5, b: { a: 10, fn: function () { console.log(this.a); //10 } } }; obj.b.fn();

不是說(shuō)this的最終指向的是那個(gè)調(diào)用它所在函數(shù)的對(duì)象嗎?這里為什么不指向obj對(duì)象呢?

這里需要補(bǔ)充三點(diǎn):

如果一個(gè)函數(shù)中有this,但是它沒(méi)有被上一級(jí)的對(duì)象所調(diào)用,那么this指向的就是window。 如果一個(gè)函數(shù)中有this,這個(gè)函數(shù)有被上一級(jí)的對(duì)象所調(diào)用,那么this指向的就是上一級(jí)的對(duì)象。 如果一個(gè)函數(shù)中有this,這個(gè)函數(shù)中包含多個(gè)對(duì)象,盡管這個(gè)函數(shù)是被最外層的對(duì)象所調(diào)用,this指向的也只是它上一級(jí)的對(duì)象。

看到這相信大家基本掌握了this指向的原則了吧,再碎碎念一遍:this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰(shuí),實(shí)際上this的最終指向的是那個(gè)調(diào)用它所在函數(shù)的對(duì)象。

下面給大家介紹this幾種不同的使用情況

構(gòu)造函數(shù)(new 關(guān)鍵字)情況

function Student() { this.name = ’清蒸胖頭魚(yú)’; } var s1 = new Student(); console.log(s1.name);// 清蒸胖頭魚(yú)

這里之所以對(duì)象s1可以點(diǎn)出函數(shù)Student里面的name 是因?yàn)閚ew關(guān)鍵字可以改變this的指向,將這個(gè)this指向?qū)ο髎1.

// new 關(guān)鍵字執(zhí)行的過(guò)程 1. 在函數(shù)體內(nèi)創(chuàng)建一個(gè)空的對(duì)象. 2. 讓當(dāng)前this指向這個(gè)空的對(duì)象. 3. 通過(guò)this給當(dāng)前空的對(duì)象添加鍵值對(duì). 4. 返回已經(jīng)添加好所有鍵值對(duì)的對(duì)象給外面的變量.

定時(shí)器里的this指向情況

var num = 0; function Obj() { this.num = 1; this.getNum1 = function () { console.log(this.num); }; this.getNum2 = function () { setInterval(function () { console.log(this.num); }, 1000); }; } var o = new Obj(); o.getNum1();//1 (o.num) o.getNum2();//0 (window.num)

o.getNum2()值之所以為0,也就是這里的this指向window,再拿出我們的this指向原則解釋?zhuān)簍his的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰(shuí),實(shí)際上this的最終指向的是那個(gè)調(diào)用它所在函數(shù)的對(duì)象。

解: this.num所在的函數(shù)為定時(shí)器setInterval內(nèi)的function () { console.log(this.num);},根據(jù)this指向原則當(dāng)該函數(shù)被執(zhí)行,this指向它的上一級(jí)對(duì)象。setInterval,又因setInterval是window點(diǎn)出了的,所以this指向window。

call、apply、bind 改變指向情況

var num = 0; function Obj() { this.num = 1; this.getNum1 = function () { console.log(this.num); }; this.getNum2 = function () { setInterval(function () { console.log(this.num); }.bind(this), 1000);//利用bind將this綁定到這個(gè)函數(shù)上 }; } var o = new Obj(); o.getNum1();//1 (o.num) o.getNum2();//1 (o.num)

解釋?zhuān)?/p>

bind()方法是Function.prototype上的一個(gè)方法,當(dāng)被綁定函數(shù)調(diào)用時(shí),bind方法會(huì)創(chuàng)建一個(gè)新函數(shù),并將第一個(gè)參數(shù)作為新函數(shù)的運(yùn)行時(shí)的this。

根據(jù)原則:

沒(méi)使用bind方法前:被調(diào)用時(shí):this.num指向的是調(diào)用它所在函數(shù)的對(duì)象,也就是window.setTimeout對(duì)象。 使用bind方法后:被調(diào)用時(shí):將原來(lái)的this重新指向到→調(diào)用getSum2函數(shù)(就是新this所在的函數(shù))的對(duì)象。這里構(gòu)造函數(shù),通過(guò)new調(diào)用,所以指向o對(duì)象。

bind方法在該情況比較常用,當(dāng)然如果使用call或apply方法來(lái)代替也行,得到的結(jié)果也是正確的,但是call和apply方法會(huì)在調(diào)用后馬上執(zhí)行,那樣就沒(méi)了延時(shí)的效果,定時(shí)器也就沒(méi)有意義了。

以上就是詳解JavaScript中的this指向問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于JavaScript this指向的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美aa一级| 麻豆视频久久| 久久人人99| 中文字幕色婷婷在线视频| 国产精品中文字幕亚洲欧美| 欧美偷窥清纯综合图区| 91久久精品无嫩草影院| 日韩福利在线观看| 国产精品一区二区美女视频免费看| 日韩av网站免费在线| 日本三级亚洲精品| 国产精品va| 日韩高清在线观看一区二区| 日本欧美大码aⅴ在线播放| 国产精品一区二区av交换| 久久99国产精品视频| 日韩久久视频| 黄色免费成人| 日韩欧美美女在线观看| 久久99性xxx老妇胖精品| 91一区二区三区四区| 不卡在线一区| 亚洲欧美网站在线观看| 国产精品亚洲片在线播放| 98精品久久久久久久| 午夜久久99| 欧美永久精品| 另类小说一区二区三区| 日韩欧美二区| 夜夜精品视频| 国产免费av国片精品草莓男男| 四季av一区二区凹凸精品| 香蕉国产精品| 国产精品日韩久久久| 日韩精品免费一区二区三区| 欧美jjzz| 日韩国产一二三区| 国产精品久久观看| 制服诱惑一区二区| 国产欧美日韩免费观看| 超级白嫩亚洲国产第一| 国产精品91一区二区三区| 欧美特黄视频| 国产精品欧美大片| 极品日韩av| 国产亚洲一卡2卡3卡4卡新区| 97精品国产一区二区三区 | 新版的欧美在线视频| 一区二区亚洲视频| 美美哒免费高清在线观看视频一区二区| 欧美专区在线| 国产成人精品一区二区三区视频 | 精品五月天堂| 色吊丝一区二区| 日韩综合小视频| 正在播放日韩精品| 亚洲精品观看| 久久精品国内一区二区三区| 99久久精品国产亚洲精品| 日韩二区在线观看| 激情偷拍久久| 捆绑调教美女网站视频一区| 在线午夜精品| 国产成年精品| 亚洲美女91| 国产白浆在线免费观看| 视频一区国产视频| 不卡一二三区| 久久九九国产| 久久国产日韩欧美精品| 欧美成人高清| 麻豆视频一区二区| 中文字幕免费一区二区| 五月天av在线| 久久国产三级精品| 夜夜嗨一区二区| 极品av在线| 欧美日本久久| 日韩中文字幕91| 99视频精品全部免费在线视频| 香蕉久久久久久| 99久久激情| 久久久久久色 | 亚洲一区欧美二区| 色偷偷色偷偷色偷偷在线视频| 欧美一区影院| 在线免费观看亚洲| 九一国产精品| 亚洲人成在线网站| 久久精品国产999大香线蕉 | 亚洲免费网址| 久久黄色影院| 97精品国产一区二区三区| 国产精品丝袜在线播放| 日韩一区二区三区免费视频| 尤物在线精品| 亚洲第一精品影视| 肉色欧美久久久久久久免费看| 国产精品2区| 欧美影院视频| 亚洲精品乱码| 久久成人国产| 午夜视频精品| 激情欧美国产欧美| а√天堂8资源在线| 国产精品亚洲综合色区韩国| 日韩和欧美一区二区| 亚洲精品少妇| 中文视频一区| 免费观看久久久4p| 午夜一区在线| 蜜臀av免费一区二区三区| 热三久草你在线| 精品亚洲a∨| 国产成人a视频高清在线观看| 精品一级视频| 久草免费在线视频| 国产成人免费av一区二区午夜| 久久av日韩| 国产精久久一区二区| 国产麻豆一区| 美女久久久久久 | 风间由美中文字幕在线看视频国产欧美| 久久国产三级| 久久不见久久见免费视频7| 国产精品成人国产| 久久久久九九精品影院| 色爱综合网欧美| 成人影视亚洲图片在线| 欧美激情国产在线| 久久久久国产精品一区二区| 91精品国产自产在线观看永久∴| 色婷婷狠狠五月综合天色拍| 欧美特黄一级大片| 一区视频在线| 伊人久久大香伊蕉在人线观看热v| 亚洲欧洲日韩| 国产精品一区二区精品| 欧美精品aa| 色婷婷色综合| 亚洲国内精品| 久久av一区二区三区| 亚洲另类黄色| 国产欧美一区二区三区国产幕精品 | 亚洲一区日本| 亚洲精品少妇| 国产精品一区二区精品视频观看| 欧美国产三级| 秋霞影院一区二区三区| 99视频一区| 色8久久久久| 欧美黄色一区| 婷婷精品视频| 日韩在线黄色| 欧美精品aa| 亚洲电影在线| 亚洲人成毛片在线播放女女| 国产精品亚洲片在线播放| 日韩欧美一区二区三区免费看| 91久久久精品国产| 日产欧产美韩系列久久99| 久久午夜影院| 午夜久久一区| 国产欧美日韩一区二区三区在线| 色乱码一区二区三区网站| 99国产一区| 国产精品久久777777毛茸茸| 天堂а√在线最新版中文在线| 另类国产ts人妖高潮视频| 亚州精品视频| 久久99久久人婷婷精品综合| 播放一区二区| 亚洲开心激情| 中文字幕在线看片| 亚洲综合婷婷| 国产福利91精品一区二区| 亚洲一区免费| 精品一区视频| 免费人成黄页网站在线一区二区| 国产精品美女久久久久久不卡| 久久久一二三| 国产探花在线精品| 久久精品国内一区二区三区水蜜桃| 性欧美精品高清| 日韩不卡一二三区| 久久一级电影| 久久成人av| 亚洲欧美日本日韩| 国产一区二区视频在线看| 视频一区国产视频| 亚洲最新无码中文字幕久久| 深夜日韩欧美| 久久天堂av| 国产精品亲子伦av一区二区三区| 怡红院精品视频在线观看极品| 久久精品国产亚洲aⅴ| 亚洲精品美女91| 国产一区亚洲| 麻豆高清免费国产一区| 性欧美长视频|