亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解JavaScript中關于this指向的4種情況

2024-05-06 16:50:06
字體:
來源:轉載
供稿:網友

對很多前端開發者來說,JavaScript語言的this指向是一個令人頭疼的問題。先看下面這道測試題,如果你能實現并解釋原因,那本文對你來說價值不大,可以直接略過。

**開篇測試題:**嘗試實現注釋部分的Javascript代碼,可在其他任何地方添加更多代碼(如不能實現,說明一下不能實現的原因):

let Obj = function (msg) {  this.msg = msg  this.shout = function () {   alert(this.msg)  }  this.waitAndShout = function () {   // 隔5秒后執行上面的shout方面   setTimeout(function () {    let self = this    return function () {     self.shout()    }   }.call(this), 5000)  } }

題目的參考答案在文末,但我不建議你直接查看答案,而是先閱讀并思考文章的中的知識點。

一、在對象屬性中的this指向問題

對象的屬性是函數,那么函數中的this指向的是對象本身,即例子中的obj

 var obj = {  x: 123,  fn: function () {   console.log(this) // {x: 123, fn: ƒ}   console.log(this.x) // 123  } } obj.fn()

對象的屬性是函數,函數內部還有函數,那么這個二級(及以上)函數的this指向的是window

var obj = {  x: 456,  fn: function () {   console.log('fn', this) // {x: 456, fn: ƒ}   var f1 = function () {    console.log('fn.f1', this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}    console.log(this.x) // undefined    var f2 = function () {     console.log('fn.f2', this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}    }    f2()   }   f1()  } } obj.fn()

從上面的例子,我們可以總結出,對象屬性中,嵌套超過一級及以上的函數,this指向都是window

二、構造函數中的this指向問題

構造函數中的一級函數,this指向通過構造函數new出來的實例(例子中的person)

 var Person = function () {  this.name = 'linlif'  this.fn = function () {   console.log('fn', this) // {name: "linlif", fn: ƒ}  } } var person = new Person() person.fn()

構造函數中的二級(及以上)函數,this指向的是window

var Person = function () {  this.name = 'linlif'  this.fn = function () {   console.log('fn', this) // {name: "linlif", fn: ƒ}   var f2 = function () {    console.log('f2', this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}    var f3 = function () {     console.log('f3', this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}    }    f3()   }   f2()  } } var person = new Person() person.fn()

從上面的例子,我們可以總結出,構造函數中,嵌套超過一級及以上的函數,this指向的都是window

三、全局上下文環境中this指向問題

全局上下文環境,this指向瀏覽器的window對象,例如:

 // 全局的this console.log(this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …} console.log(this === window) // true // 全局的普通函數 var global = function () {  console.log(this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …} } global()

四、call()和apply()對this指向的影響

使用call()方法后,this指向call()方法的參數。使用apply()的結果和call()是一致的,這里不做贅述。關于call()和apply()用法的區別,請自行查詢相關資料。

// 改變調用對象為gObj var gObj = {  name: 'gName' } var aaa = function () {  console.log(this) // {name: "gName"}  console.log(this.name) // gName } aaa.call(gObj)  // 改變調用對象為window var name = 'global' var bbb = function () {  console.log(this) // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}  console.log(this.name) // global } bbb.call(this)

總結:這就是一些關于this的指向問題的個人理解了,如果發現不妥之處,歡迎在評論區指出,或者私信我。

彩蛋 開篇測試題的參考答案,僅供參考?。ㄓ幸馑嫉牡胤剑侯}目中,函數名的第一個字母大寫,已經暗示這是一個構造函數)

let Obj = function (msg) {  this.msg = msg  this.shout = function () {   alert(this.msg)  }  this.waitAndShout = function () {   // 隔5秒后執行上面的shout方面   setTimeout(function () {    let self = this    return function () {     self.shout()    }   }.call(this), 5000)  } } let obj = new Obj('msg') obj.waitAndShout()

以上所述是小編給大家介紹的JavaScript中關于this指向的4種情況詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久这里只有精品视频首页| 欧美有码在线观看| 欧美极品少妇全裸体| 欧美日韩亚洲一区二区| 欧美成人免费小视频| 国产一区二区三区高清在线观看| 亚洲欧美日韩天堂一区二区| 日韩精品一区二区视频| 91九色单男在线观看| 69**夜色精品国产69乱| 在线视频中文亚洲| 久热精品视频在线观看一区| 日韩精品一区二区三区第95| 久久久精品中文字幕| 一区国产精品视频| 国产精品久在线观看| 中文字幕在线看视频国产欧美在线看完整| 国产视频精品va久久久久久| 久久久久久久国产精品视频| 一道本无吗dⅴd在线播放一区| 久久久精品2019中文字幕神马| 日韩高清人体午夜| 日韩亚洲国产中文字幕| 成人欧美一区二区三区在线湿哒哒| 亚洲综合日韩中文字幕v在线| 中文字幕欧美日韩在线| 日韩免费高清在线观看| 亚洲社区在线观看| 国产成人精品一区二区三区| 久久久最新网址| 国产一区二区三区在线观看视频| 国产精品白嫩美女在线观看| 亚洲第一网站免费视频| 7777精品视频| 国产综合香蕉五月婷在线| 国产在线播放不卡| 国产精品香蕉av| 午夜精品久久久久久久99热浪潮| 午夜精品理论片| 欧美激情一二区| 成人精品一区二区三区电影免费| 国产日韩av高清| 久久久久久尹人网香蕉| 亚洲色图50p| 久久精品国产久精国产一老狼| 色综合久久久久久中文网| 亚洲一区美女视频在线观看免费| 日韩欧美aⅴ综合网站发布| 神马久久久久久| 亚洲成年人影院在线| 亚洲乱亚洲乱妇无码| 日韩美女在线看| 国产成人福利视频| 中文字幕av一区二区| 一区国产精品视频| 欧美一级电影免费在线观看| 国产精品久久久久久久久| 中文字幕日韩免费视频| 一本大道久久加勒比香蕉| 欧美日韩美女在线| 68精品久久久久久欧美| 国产丝袜一区二区| 国产精品视频自在线| 欧美日韩国产精品一区二区三区四区| 日韩激情在线视频| 欧美日韩高清在线观看| 久色乳综合思思在线视频| 国产成人在线一区二区| 亚洲色图色老头| 亚洲国产成人一区| 欧美丰满少妇xxxxx做受| 2024亚洲男人天堂| 久久99精品国产99久久6尤物| 久久综合久久美利坚合众国| 成人国内精品久久久久一区| 亚洲一区亚洲二区亚洲三区| 国产综合视频在线观看| 国产视频精品一区二区三区| 中文字幕欧美精品日韩中文字幕| 国产不卡av在线| 精品视频www| 91色视频在线导航| 国产成人av网址| 色综合久久悠悠| 国产亚洲一区精品| 亚洲一区二区国产| 久久免费少妇高潮久久精品99| 亚洲精品久久久久久久久久久久久| 亚洲电影在线观看| 精品欧美aⅴ在线网站| 欧美激情极品视频| 亚洲精品suv精品一区二区| 欧美老女人性生活| 日韩精品极品毛片系列视频| 91免费人成网站在线观看18| 国产精品久久久久久久久男| 中文字幕亚洲一区在线观看| 91极品视频在线| 久久久久久国产精品久久| 美日韩精品视频免费看| 精品国产网站地址| 午夜精品一区二区三区视频免费看| 亚洲自拍小视频| 亚洲综合小说区| 成人精品视频久久久久| 国产免费一区二区三区在线能观看| 国产精品户外野外| 久久不射电影网| 久久精品99久久久香蕉| 成人在线一区二区| 国产免费一区二区三区在线能观看| 成人羞羞国产免费| 国产亚洲人成a一在线v站| 一本色道久久88综合日韩精品| 久久香蕉精品香蕉| 亚洲国产精品久久| 91精品久久久久久综合乱菊| 国产精品欧美日韩| 亚洲成av人影院在线观看| 亚洲欧洲日本专区| 久国内精品在线| 欧美高清在线播放| 欧洲精品在线视频| 精品亚洲男同gayvideo网站| 久久成人人人人精品欧| 精品视频久久久久久久| 97国产精品视频人人做人人爱| 91精品久久久久久久久青青| 国产精品免费福利| 国产91精品久| 日韩最新免费不卡| 欧美激情区在线播放| 日本久久久久久久| 成人免费福利视频| 精品久久久久久久久久| 97在线免费观看视频| 亚洲va欧美va国产综合久久| 国产精品吊钟奶在线| 日韩欧美一区二区三区久久| 国产亚洲日本欧美韩国| 成人一区二区电影| 欧美午夜丰满在线18影院| 久久精品视频在线观看| 欧美激情在线狂野欧美精品| 亚洲第一视频在线观看| 成人国产精品免费视频| 97香蕉超级碰碰久久免费软件| 国产精品午夜视频| 国产伦精品一区二区三区精品视频| 亚洲91精品在线观看| 欧美性感美女h网站在线观看免费| 91亚洲精品一区二区| 国产精品亚洲精品| 久久精品成人动漫| 亚洲a级在线观看| 日韩成人在线视频观看| 自拍偷拍亚洲欧美| 另类视频在线观看| 亚洲成人免费在线视频| 久久精品91久久久久久再现| 亚洲福利视频二区| 日韩欧美第一页| 青青a在线精品免费观看| 成人精品视频久久久久|