国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:40:24
字體:
來源:轉載
供稿:網友

對很多前端開發者來說,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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 钦州市| 芷江| 瑞丽市| 萨嘎县| 沙洋县| 安远县| 黄骅市| 白玉县| 平顶山市| 泸定县| 南华县| 郑州市| 永安市| 梁平县| 西充县| 平果县| 涟源市| 广丰县| 汉沽区| 宣汉县| 武宁县| 陇南市| 乌兰察布市| 嘉黎县| 湘阴县| 乌兰县| 天全县| 运城市| 阿坝县| 拉萨市| 雅安市| 襄樊市| 孝感市| 迁安市| 宁陕县| 政和县| 夹江县| 从江县| 德钦县| 吴堡县| 吴堡县|