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

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

javascript this指向相關問題及改變方法

瀏覽:49日期:2023-10-07 18:02:21

在學習javascript中我們往往會被this的指向問題弄的頭昏轉向,今天我們就來學習一下this的指向問題,和改變this指向的方法。

一.this的指向問題

在學習this的指向問題之前我們需要明白兩點:

1:this永遠指向一個對象;

2:this的指向完全取決于函數調用的位置;

針對上面第一點我們能很好理解,因為在javascript中一切都是對象。第二點其實也是好理解,當函數調用的位置不同是,this的指向的對象就不同,所以可以說this的指向可以動態變換的,下面我們先通過一個簡單的例子來看一下this的指向是變換的

<script>function fun(){ console.log(this.name); } var change={ name:’hello’, f:fun } var name =’world’ var result=change.f()//hello fun();//world</script>

通過上述例子我們可以很清楚的看到this的指向的變化,因為有一個函數在對象change里面,所以this就是指向的函數外部的對象,所以輸出了hello。

想必看完上述例子后大家對this的動態指向切換有了一定的了解。

那么接下來,我們對this使用最頻繁的幾種情況做一個總結,最常見的基本就是以下3種:

對象中的方法,事件綁定 ,構造函數 ,定時器

前兩個就不必多說了,我們看一下定時器中的this指向問題,

var obj = { fun:function(){ this ; }}​setInterval(obj.fun,1000); // this指向window對象setInterval(’obj.fun()’,1000); // this指向obj對象

setInterval() 是window對象下內置的一個方法,接受兩個參數,第一個參數允許是一個函數或者是一段可執行的 JS 代碼,第二個參數則是執行前面函數或者代碼的時間間隔;

在上面的代碼中,setInterval(obj.fun,1000) 的第一個參數是obj對象的fun ,因為 JS 中函數可以被當做值來做引用傳遞,實際就是將這個函數的地址當做參數傳遞給了 setInterval 方法,換句話說就是 setInterval 的第一參數接受了一個函數,那么此時1000毫秒后,函數的運行就已經是在window對象下了,也就是函數的調用者已經變成了window對象,所以其中的this則指向的全局window對象;

而在 setInterval(’obj.fun()’,1000) 中的第一個參數,實際則是傳入的一段可執行的 JS 代碼;1000毫秒后當 JS 引擎來執行這段代碼時,則是通過 obj 對象來找到 fun 函數并調用執行,那么函數的運行環境依然在 對象 obj 內,所以函數內部的this也就指向了 obj 對象;

除了這些我們還需要理解三個可以改變this指向的函數,包括箭頭函數,call(),apply()

箭頭函數:官方有解釋,箭頭函數引入的其中一個原因,就是其不綁定this;在箭頭函數中,箭頭函數的this被設置為封閉的詞法環境的,換句話說,箭頭函數中的this取決于該函數被創建時的環境。

var globalObject = this;var foo = (() => this);console.log(foo() === globalObject); // true// 接著上面的代碼// 作為對象的一個方法調用var obj = {foo: foo};console.log(obj.foo() === globalObject); // true// 嘗試使用call來設定thisconsole.log(foo.call(obj) === globalObject); // true// 嘗試使用bind來設定thisfoo = foo.bind(obj);console.log(foo() === globalObject); // true

無論如何,foo 的 this 被設置為他被創建時的環境(在上面的例子中,就是全局對象)。這同樣適用于在其他函數內創建的箭頭函數:這些箭頭函數的this被設置為封閉的詞法環境的。

// 創建一個含有bar方法的obj對象,// bar返回一個函數,// 這個函數返回this,// 這個返回的函數是以箭頭函數創建的,// 所以它的this被永久綁定到了它外層函數的this。// bar的值可以在調用中設置,這反過來又設置了返回函數的值。var obj = { bar: function() { var x = (() => this); return x; }};// 作為obj對象的一個方法來調用bar,把它的this綁定到obj。// 將返回的函數的引用賦值給fn。var fn = obj.bar();// 直接調用fn而不設置this,// 通常(即不使用箭頭函數的情況)默認為全局對象// 若在嚴格模式則為undefinedconsole.log(fn() === obj); // true// 但是注意,如果你只是引用obj的方法,// 而沒有調用它var fn2 = obj.bar;// 那么調用箭頭函數后,this指向window,因為它從 bar 繼承了this。console.log(fn2()() == window); // true

call和apply方法:將一個對象作為call或者apply的第一個參數,this將會被綁定到這個參數對象上

var obj = {parent:’男’};var parent = ’28’;function child(obj){ console.log(this.parent);}child(); // 28 child.call(obj); //男child.apply(obj); //男

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产在线日韩| 国产精品亚洲综合色区韩国| 精品一区视频| 欧美精品导航| 国产亚洲精品美女久久| 欧美午夜三级| 国产乱人伦丫前精品视频| 日韩av一级片| 国产精品一区2区3区| 欧美啪啪一区| 国产精品资源| 麻豆久久一区| 国产一区国产二区国产三区 | zzzwww在线看片免费| 毛片不卡一区二区| sm捆绑调教国产免费网站在线观看| 伊人久久在线| 在线精品视频在线观看高清| 欧美亚洲国产一区| 亚洲在线免费| 日本a级不卡| 麻豆91小视频| 久久久久中文| 久久久久国产| 一区二区电影在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 99久久亚洲精品| 国产精品免费99久久久| 久久中文字幕二区| 欧美丰满日韩| 伊人久久一区| 中文精品视频| 日韩欧美中文| 99re国产精品| 综合亚洲自拍| 精品国产日韩欧美精品国产欧美日韩一区二区三区| 国产经典一区| 麻豆久久久久久| 欧美日韩1区2区3区| 国产日韩欧美中文在线| 国产成人精选| 99在线|亚洲一区二区| 日韩欧美一区二区三区在线观看 | 国产美女视频一区二区| 国产一区二区精品久| 午夜久久福利| 亚洲a成人v| 成人在线超碰| 久久都是精品| 国产一区二区精品福利地址| av日韩中文| 欧美亚洲免费| 免费不卡在线观看| 男女精品网站| 久久av免费看| 伊人久久亚洲影院| 久久精品国产99国产| 亚洲天堂黄色| 国产精品地址| 免费日韩一区二区| 国际精品欧美精品| 日韩中文欧美| 日韩精品免费一区二区夜夜嗨| 久久aⅴ国产紧身牛仔裤| 国产精品最新| 尤物精品在线| 红杏一区二区三区| 伊人久久大香伊蕉在人线观看热v| 国产精品二区不卡| 日韩国产欧美视频| 免费精品国产| 高清久久精品| 人人爱人人干婷婷丁香亚洲| 久久国产电影| 国产精品.xx视频.xxtv| 水野朝阳av一区二区三区| 国产欧美91| 蜜桃视频第一区免费观看| 91一区二区三区四区| 日韩精品成人在线观看| 免费视频亚洲| 国产aⅴ精品一区二区四区| 亚久久调教视频| 欧美69视频| 色爱综合网欧美| 国产乱人伦丫前精品视频| 在线一区视频| 999久久久免费精品国产| 欧美黑人做爰爽爽爽| 日韩精选在线| 久久亚洲风情| 日韩av免费| 精品欠久久久中文字幕加勒比| 亚洲人www| 亚洲一区黄色| 亚洲免费观看| 欧美日韩少妇| 宅男在线一区| 久久亚洲专区| 日韩毛片视频| 福利欧美精品在线| 麻豆91小视频| 麻豆精品新av中文字幕| 国产精品入口久久| 国产免费av国片精品草莓男男| 97精品国产99久久久久久免费| 国产美女精品| 99日韩精品| 99成人在线| 亚洲在线免费| 蜜桃视频一区二区三区 | 久久电影tv| 日本久久综合| 国产a久久精品一区二区三区| 久久精品一区| 精品视频自拍| 国产成人久久精品麻豆二区 | 国产精品一区三区在线观看| 日韩欧美中文字幕一区二区三区| 亚洲图片久久| 亚洲三级视频| 日韩有吗在线观看| 欧美一区不卡| 国产精东传媒成人av电影| 国产精品超碰| 国产一区一一区高清不卡| sm捆绑调教国产免费网站在线观看 | 精品久久久久中文字幕小说| 国产精品天天看天天狠| 国产精品美女在线观看直播| 国产精品成人3p一区二区三区| 美女久久久久久 | 国产精品啊v在线| 美女视频网站久久| 国产精品久久久久9999高清| 国产福利一区二区三区在线播放| 久久久国产精品网站| 成人午夜网址| 亚洲一级特黄| 爽爽淫人综合网网站| 少妇精品久久久一区二区| 日韩av不卡在线观看| 国产精品成人**免费视频 | 国产成人精品一区二区三区视频 | 91久久亚洲| 亚洲五月综合| 欧美日韩亚洲一区三区| 欧美日本三区| 国产成人精品一区二区三区在线| 亚洲精品在线影院| 国产视频一区免费看| 日韩精品欧美成人高清一区二区| 国产精品调教| 成人日韩精品| 亚洲欧美日韩综合国产aⅴ| 亚洲一区观看| 欧美在线观看天堂一区二区三区| 久久gogo国模啪啪裸体| 国产在线观看www| 激情91久久| 欧美日韩夜夜| 日韩精品欧美| 视频精品一区| av中文字幕在线观看第一页| 国产精品毛片| 国产精品亚洲综合在线观看| 国产成人免费| 噜噜噜躁狠狠躁狠狠精品视频 | 国产伦精品一区二区三区千人斩 | 91综合网人人| 亚洲女人av| 国产精品大片免费观看| 日韩精品欧美| 日韩免费精品| 亚洲最新无码中文字幕久久| 久久亚洲欧美| 久久天堂影院| 99re国产精品| 精品中文字幕一区二区三区| 国产综合亚洲精品一区二| 欧美啪啪一区| 蜜桃tv一区二区三区| 国产美女久久| 尹人成人综合网| 久久精品免费看| 首页亚洲欧美制服丝腿| 日韩.com| 日韩成人一级| 欧美亚洲在线日韩| 久久99影视| 噜噜噜久久亚洲精品国产品小说| 精品美女视频| 亚洲一区二区三区中文字幕在线观看| 精品不卡一区| 日韩国产在线观看一区| 精品中文一区| 国产一区二区亚洲| 一区二区日韩免费看| 日韩在线欧美| 国产精品蜜月aⅴ在线|