成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:24日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人午夜激情影院| 欧美日韩喷水| 欧美不卡高清| 91超碰这里只有精品国产| 婷婷久久综合九色综合绿巨人 | 久久久久国色av免费看影院| 韩国中文字幕2020精品| 91国偷自产一区二区三区观看| 夜夜嗨av一区二区三区中文字幕| 欧美高清视频一区二区三区在线观看 | 久久午夜老司机| 成人午夜免费电影| 91精品国产综合久久久久久久久久| 青青草成人在线观看| 中日韩视频在线观看| 中文子幕无线码一区tr| 91免费国产在线| 国产欧美日韩亚州综合| 欧美日韩国产高清| 中文字幕欧美区| 欧美日韩综合| 亚洲天堂免费在线观看视频| 红桃视频欧美| 欧美极品少妇xxxxⅹ高跟鞋| 欧美暴力喷水在线| 国产精品久久久久久久久久久免费看 | 99精品黄色片免费大全| 精品成人佐山爱一区二区| 国产成人福利片| 日韩欧美一区二区在线视频| 丁香激情综合五月| 久久影音资源网| 国产精品99一区二区| 亚洲同性同志一二三专区| 在线日韩欧美| 一区二区三区不卡视频| 亚洲综合不卡| 亚洲国产成人av| 久久精品123| 免费观看91视频大全| 欧美日韩精品是欧美日韩精品| 九一九一国产精品| 日韩精品一区二区在线观看| 国内外成人在线| 日韩免费观看高清完整版在线观看| www.亚洲精品| 国产欧美日韩另类一区| 在线观看一区欧美| 亚洲午夜免费电影| 欧美视频日韩视频在线观看| 国产成人精品一区二| 国产亚洲欧洲997久久综合| 欧美区国产区| 亚洲精品国产一区二区精华液| 国产欧美日韩在线播放| 日韩av一二三| 欧美一卡2卡3卡4卡| 欧美一区激情视频在线观看| 中文字幕永久在线不卡| 亚洲一区二区三区四区中文| 美腿丝袜亚洲一区| 欧美mv日韩mv国产网站app| 欧美色图首页| 亚洲va韩国va欧美va| 欧美在线观看一区| yourporn久久国产精品| 国产精品福利av| 色噜噜狠狠成人中文综合| 老司机午夜精品| 精品久久久久一区二区国产| 黄色在线成人| 日韩国产在线观看一区| 欧美一区二区三区免费观看视频| 色综合天天综合色综合av| 一区二区三区欧美| 精品1区2区3区| 欧美精品首页| 奇米色777欧美一区二区| 精品国产网站在线观看| 一区二区三区四区国产| 国产制服丝袜一区| 国产性做久久久久久| 久久黄色网页| 盗摄精品av一区二区三区| 亚洲欧美综合另类在线卡通| 色老汉一区二区三区| av在线不卡观看免费观看| 一级做a爱片久久| 欧美一区二区精品在线| 精品96久久久久久中文字幕无| 日韩avvvv在线播放| 久久欧美一区二区| 亚洲欧美日韩国产一区| 欧美性色综合网| 99re这里只有精品6| 一区二区三区精品视频| 日韩午夜在线观看视频| 99精品欧美一区二区三区| 久久国产精品露脸对白| 国产精品久久久久久久久免费樱桃 | 欧美一区网站| 日韩黄色一级片| 欧美国产成人精品| 在线亚洲欧美专区二区| 午夜精品短视频| 老司机午夜精品| 中文字幕一区在线| 91精品国产综合久久香蕉的特点| 91久久在线| 国产成人在线视频网站| 一区二区在线观看免费视频播放| 91精品国产色综合久久不卡电影| 亚洲激情偷拍| 国产91在线|亚洲| 高清在线观看日韩| 亚洲福利视频一区二区| 久久精品免视看| 欧美午夜在线观看| 日韩视频三区| www..com久久爱| 麻豆一区二区在线| 日韩一区在线播放| 日韩欧美国产午夜精品| 久久精品1区| 黄色精品免费| 成人av资源网站| 青青草97国产精品免费观看无弹窗版| 亚洲欧洲韩国日本视频| 精品免费日韩av| 欧美午夜精品一区| 国产精品一区二区三区四区五区| 91亚洲精华国产精华精华液| 国产在线视频一区二区三区| 天天综合网天天综合色| 亚洲欧美一区二区三区久本道91| 久久亚洲精华国产精华液| 精品视频在线免费看| 国产精品日韩欧美一区二区| 91免费版在线看| 国产精品香蕉一区二区三区| 日日骚欧美日韩| 一区二区三区在线看| 国产精品区一区二区三| 91黄色小视频| 亚洲永久视频| 最新日韩av| 欧美日韩精品免费看| 播五月开心婷婷综合| 国产一区二区在线免费观看| 视频一区二区欧美| 亚洲一区在线播放| 国产精品美女久久久久久久| 欧美精品一区二区精品网| 欧美精三区欧美精三区| 91国在线观看| 久久综合中文色婷婷| 一区二区三区四区五区视频| 亚洲午夜黄色| 欧美精品91| 91丨九色丨蝌蚪丨老版| 成人中文字幕合集| 国内国产精品久久| 久草精品在线观看| 青椒成人免费视频| 日韩av二区在线播放| 午夜在线成人av| 一区二区不卡在线播放 | 日本免费新一区视频| 亚洲妇熟xx妇色黄| 一区二区三区四区国产精品| 中文字幕日本乱码精品影院| 国产精品嫩草影院com| 久久精品亚洲乱码伦伦中文| 久久先锋影音av鲁色资源网| 欧美成人女星排行榜| 日韩一级免费一区| 欧美一级视频精品观看| 9191成人精品久久| 欧美精品一二三四| 欧美精品v日韩精品v韩国精品v| 精品视频在线免费观看| 欧美日韩一区小说| 欧美日韩成人在线| 欧美日韩国产片| 欧美日韩成人一区| 51精品秘密在线观看| 3d动漫精品啪啪一区二区竹菊| 777午夜精品视频在线播放| 欧美一区二区免费视频| 日韩免费电影网站| 精品国产乱码久久久久久久久| 久久欧美一区二区| 国产调教视频一区| 中文字幕二三区不卡| 综合久久国产九一剧情麻豆| 亚洲精品一二三四区| 亚洲成人你懂的| 秋霞影院一区二区| 久久se精品一区二区| 国产真实乱对白精彩久久|