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

您的位置:首頁技術文章
文章詳情頁

詳解JavaScript中的this指向問題

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

JS中的this指向一直是個讓初學者頭疼的問題。今天,我們就一起來瞅瞅this倒地是咋回事,詳細說說this指向原則,從此不再為了this指向操碎了心。

開篇

首先我們都知道this是Javascript語言的一個關鍵字。

它代表函數運行時,自動生成的一個內部對象,只能在函數內部使用。隨著函數使用場合的不同,this的值會發生變化。但是有一個總的原則,那就是this的指向在函數定義的時候是確定不了的,只有函數執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個調用它所在函數的對象。 那么接下來我們一步步探索下這個問題。

探索一

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

如我們上文所說的this的最終指向的是那個調用它所在函數的對象,這里a其實是由window對象點出來的。

探索二

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

再次強調一點this的指向在函數定義的時候是確定不了的,只有函數執行的時候才能確定this到底指向誰;這個例子this所在的f1函數是由obj對象調用的,所以這里的this指向obj對象。

探索三

如果要徹底的搞懂this必須看接下來的幾個例子

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

不是說this的最終指向的是那個調用它所在函數的對象嗎?這里為什么不指向obj對象呢?

這里需要補充三點:

如果一個函數中有this,但是它沒有被上一級的對象所調用,那么this指向的就是window。 如果一個函數中有this,這個函數有被上一級的對象所調用,那么this指向的就是上一級的對象。 如果一個函數中有this,這個函數中包含多個對象,盡管這個函數是被最外層的對象所調用,this指向的也只是它上一級的對象。

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

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

構造函數(new 關鍵字)情況

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

這里之所以對象s1可以點出函數Student里面的name 是因為new關鍵字可以改變this的指向,將這個this指向對象s1.

// new 關鍵字執行的過程 1. 在函數體內創建一個空的對象. 2. 讓當前this指向這個空的對象. 3. 通過this給當前空的對象添加鍵值對. 4. 返回已經添加好所有鍵值對的對象給外面的變量.

定時器里的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指向原則解釋:this的指向在函數定義的時候是確定不了的,只有函數執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個調用它所在函數的對象。

解: this.num所在的函數為定時器setInterval內的function () { console.log(this.num);},根據this指向原則當該函數被執行,this指向它的上一級對象。setInterval,又因setInterval是window點出了的,所以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綁定到這個函數上 }; } var o = new Obj(); o.getNum1();//1 (o.num) o.getNum2();//1 (o.num)

解釋:

bind()方法是Function.prototype上的一個方法,當被綁定函數調用時,bind方法會創建一個新函數,并將第一個參數作為新函數的運行時的this。

根據原則:

沒使用bind方法前:被調用時:this.num指向的是調用它所在函數的對象,也就是window.setTimeout對象。 使用bind方法后:被調用時:將原來的this重新指向到→調用getSum2函數(就是新this所在的函數)的對象。這里構造函數,通過new調用,所以指向o對象。

bind方法在該情況比較常用,當然如果使用call或apply方法來代替也行,得到的結果也是正確的,但是call和apply方法會在調用后馬上執行,那樣就沒了延時的效果,定時器也就沒有意義了。

以上就是詳解JavaScript中的this指向問題的詳細內容,更多關于JavaScript this指向的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩影片在线观看| 清纯唯美亚洲综合一区| 国产一区二区三区自拍| 免费av一区二区三区四区| 欧美91精品| 国产探花一区| 日韩精品免费一区二区在线观看 | 日韩午夜黄色| 欧美日韩第一| 色88888久久久久久影院| 91综合网人人| 婷婷亚洲五月色综合| 国产精品毛片在线| 亚洲综合图色| 国产精品地址| 一级欧美视频| 777久久精品| 国产精品亚洲片在线播放| 国产探花一区二区| 香蕉视频亚洲一级| 9国产精品视频| 日韩手机在线| 欧美成人aaa| 国产成人久久精品麻豆二区| 国产精东传媒成人av电影| 国产精品午夜av| 精品美女久久| 在线综合欧美| 日本a级不卡| 日韩免费看片| 蜜桃一区二区三区| 日韩高清不卡一区| 欧美午夜精彩| 国产精品日韩久久久| 日韩av一二三| 四虎884aa成人精品最新| 亚洲综合精品四区| 久久99高清| 国产女优一区| 国产精品伊人| 欧美 日韩 国产一区二区在线视频 | 国产福利一区二区三区在线播放| 国产一区二区三区四区五区| 久久亚洲国产| 久久国产精品色av免费看| 激情婷婷久久| 精品成av人一区二区三区 | 综合一区二区三区| 日韩一区二区在线免费| 日韩久久99| 午夜欧美精品| 欧美激情视频一区二区三区在线播放| 不卡中文字幕| 婷婷成人综合| 亚洲精品伊人| 影视先锋久久| 高清日韩中文字幕| 久久精品福利| 麻豆91小视频| 久久av电影| 国产精品久久久久久妇女| 日韩中文字幕| 日本不卡的三区四区五区| 7777精品| 亚州av一区| 欧美影院视频| 亚洲一区二区三区久久久| 日韩精彩视频在线观看| 久久亚洲人体| 婷婷激情图片久久| 日韩一区二区三区高清在线观看| 久久不卡日韩美女| 粉嫩av一区二区三区四区五区 | 欧美日韩精品一本二本三本 | 亚洲精品va| 午夜欧美视频| 在线视频免费在线观看一区二区| 亚洲精品一区二区在线播放∴| 国产日韩欧美高清免费| 免费日韩成人| 日韩国产综合| 日韩av片子| 91亚洲人成网污www| 亚洲女同中文字幕| 欧美一区在线观看视频| 激情久久99| 免费看的黄色欧美网站| 国产精品jk白丝蜜臀av小说| 欧美日韩一区二区高清| 国产一区视频在线观看免费| 久久91视频| 国产欧美日韩一级| 爽好久久久欧美精品| 精品免费视频| 亚洲欧美网站在线观看| 成人日韩在线观看| 亚欧洲精品视频在线观看| 国产欧美一区二区三区米奇| 精品少妇一区| 日本在线一区二区三区| 日韩啪啪电影网| 久久精品99国产精品日本| 丝袜亚洲精品中文字幕一区| 国产亚洲第一伦理第一区| 激情综合婷婷| 日av在线不卡| 高清不卡亚洲| 天堂va欧美ⅴa亚洲va一国产| 精品国内亚洲2022精品成人 | 日韩国产高清在线| 久色成人在线| 欧美日韩一区二区综合| 色婷婷综合网| 精品一区91| 国产精品qvod| 日本99精品| 深夜日韩欧美| 国产精品人人爽人人做我的可爱| 日韩一区二区久久| 视频精品一区二区| 欧美激情麻豆| 日韩视频在线一区二区三区 | 免费一区二区视频| 欧美成人综合| 1024精品久久久久久久久| 久久国产主播| 日本久久成人网| 日韩久久精品网| 美女一区网站| 91tv亚洲精品香蕉国产一区| 日韩欧美久久| 久久狠狠久久| 麻豆网站免费在线观看| 蜜臀久久久久久久| 欧美精品二区| 国产精品日韩欧美一区| 国产精品任我爽爆在线播放 | 国产精品亚洲综合在线观看| 亚洲欧美日本国产专区一区| 最新国产精品视频| 蜜桃成人av| 欧美午夜三级| 91精品一区二区三区综合| 日本综合精品一区| 日韩电影在线视频| 少妇精品久久久一区二区三区| 99久精品视频在线观看视频| 91一区二区三区四区| 国产精品极品| 欧美a级片一区| 亚洲久久视频| 国产伊人久久| 国产免费播放一区二区| 日本不卡视频在线| 午夜av不卡| 99精品99| 国产精品久久久久av蜜臀| 国产日韩视频在线| 日韩一区亚洲二区| 乱人伦精品视频在线观看| 日韩美女国产精品| 国产亚洲毛片| 国产999精品在线观看| 国产精品羞羞答答在线观看| 久久精品国产68国产精品亚洲| 久久精品99久久无色码中文字幕| 亚洲欧洲午夜| 日韩精品久久久久久| 久久91视频| 欧美日韩国产高清电影| 亚洲精品第一| 国产一区二区三区四区五区 | 首页国产精品| 99视频+国产日韩欧美| 国产亚洲一卡2卡3卡4卡新区| 国产麻豆一区二区三区 | 日韩一区二区在线免费| 视频一区二区国产| 久久国产精品毛片| 国产suv精品一区二区四区视频| 在线观看精品| 综合激情在线| 成人国产精品| 麻豆成人在线| 精品国产欧美日韩| 黄色国产精品| 国产伦理久久久久久妇女| 色综合www| 亚洲综合日本| 国产视频网站一区二区三区| 日本中文字幕一区二区视频| 日韩精品导航| 久久丁香四色| 日韩欧美中文| 国产国产精品| 欧美亚洲色图校园春色| 国产精选在线| 亚洲一级特黄| 国产三级一区| 岛国av在线网站|