• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    用最簡單的方法判斷JavaScript中this的指向(推薦)

    來源:懂視網 責編:小采 時間:2020-11-27 22:31:15
    文檔

    用最簡單的方法判斷JavaScript中this的指向(推薦)

    用最簡單的方法判斷JavaScript中this的指向(推薦):都說 JavaScript 是一種很靈活的語言,這其實也可以說它是一個混亂的語言。它把 函數式編程 和 面向對象編程 糅合一起,再加上 動態語言 特性,簡直強大無比(其實是不能和C++比的,^_^ )。 JS 里的 this 在 function 內部被創建 指向調用時所在函數
    推薦度:
    導讀用最簡單的方法判斷JavaScript中this的指向(推薦):都說 JavaScript 是一種很靈活的語言,這其實也可以說它是一個混亂的語言。它把 函數式編程 和 面向對象編程 糅合一起,再加上 動態語言 特性,簡直強大無比(其實是不能和C++比的,^_^ )。 JS 里的 this 在 function 內部被創建 指向調用時所在函數

    都說 JavaScript 是一種很靈活的語言,這其實也可以說它是一個混亂的語言。它把 函數式編程 和 面向對象編程 糅合一起,再加上 動態語言 特性,簡直強大無比(其實是不能和C++比的,^_^ )。

    JS 里的 this

  • 在 function 內部被創建
  • 指向調用時所在函數所綁定的對象(拗口)
  • this 不能被賦值,但可以被 call/apply  改變
  • 目錄

    * 一個特例
    * 開始判斷
        * 法則一:對象方法中的this指向對象本身(箭頭函數形式的除外)
        * 法則二:多層嵌套函數中的this指向等同于包含該this的最近一個function的this
        * 法則三:箭頭函數以及非指向對象方法中的function的情況下this指向window
    * 習題集
        * 普通函數中的this
        * 函數執行后返回另外一個函數中的this(普通函數中)
        * 多層嵌套函數中的this(定時器&箭頭函數)1
        * 多層嵌套函數中的this(定時器&箭頭函數)2

    一個特例

    在正式開始之前,我們先來說一個特例。

    // 構造函數
    function Student(name) {
     this.name = name
    }
    // 創建小明和小紅兩個實例
    var XM = new Student('xiaoming')
    var XH = new Student('xiaohong')
    // 
    輸出信息 console.log(XM) // Student {name: "xiaoming"} console.log(XH) // Student {name: "xiaohong"}

    在構造函數中,this上的值會在創建實例的時候被綁定到新創建的實例上。不適用于下面的判斷方法,所以特此說明。

    開始判斷

    下面是一個典型例子,我們的分析從這里開始。

    var x = {
     name: 'bw2',
     getName1: function() {
     console.log(this)
     },
     getName2: function() {
     setTimeout(() => {
     console.log(this)
     },0)
     },
     getName31: () => {
     console.log(this)
     },
     getName32: function() {
     return function() {
     console.log(this)
     }
     }
    }
    x.getName1() // {name: "bw2", getName1: ƒ}
    x.getName2() // {name: "bw2", getName1: ƒ}
    x.getName31() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
    x.getName32()() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}

    法則一:對象方法中的this指向對象本身(箭頭函數形式的除外)

    var x = {
     name: 'bw2',
     getName1: function() {
     console.log(this)
     }
    }
    x.getName1() // {name: "bw2", getName1: ƒ}

    法則二:多層嵌套函數中的this指向等同于包含該this的最近一個function的this

    箭頭函數沒有獨立的this作用域,所以繼續往外層走,走到了getName: function(){}。那么就是他了,this指向等同于這個function內部的this指向。根據法則一,this指向對象本身。

    var x = {
     name: 'bw2',
     getName2: function() {
     console.log(this) // 等同于此處的this
     setTimeout(() => {
     console.log(this) // 原始的this位置
     },0)
     }
    }
    x.getName2() // {name: 'bw2', getName1: ƒ}

    我們可以試著在瀏覽器中運行,看看結果。

    法則三:箭頭函數以及非指向對象方法中的function的情況下this指向window

    根據法則二,this是指向最近的function,因此,這里的this等同于返回的函數中的this,不是對象方法中的this,所以,指向全局。

    是不是感覺有點奇怪?不過實踐證明確實如此。

    var x = {
     name: 'bw2',
     getName31: () => {
     console.log(this)
     },
     getName32: function() {
     return function() {
     console.log(this)
     }
     }
    }
    x.getName31() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
    x.getName32()() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}

    習題集

    歡迎大家按照法則一到三依次判斷,猜測結果,并在瀏覽器下測試。測試結果也可以回復,大家一起討論。

    因本人能力有限,該系列法則可能在部分情況下失效。歡迎大家一起討論。

    下面是做題時間。

    普通函數中的this

    function x() {
     console.log(this)
    }
    x()

    函數執行后返回另外一個函數中的this(普通函數中)

    function xx(){
     return function() {
     console.log(this)
     }
    }
    xx()()

    多層嵌套函數中的this(定時器&箭頭函數)1

    var x = {
     name: 'bw2',
     getName: () => {
     setTimeout(() => {
     console.log(this)
     },0)
     }
    }
    x.getName()

    多層嵌套函數中的this(定時器&箭頭函數)2

    var x = {
     name: 'bw2',
     getName: () => {
     setTimeout(function() {
     console.log(this)
     },0)
     }
    }
    x.getName()

    再次說明,該法則為實驗性法則,未進行大范圍的測試,不保證在所有情況下都有一致的結果。如果你發現了法則判斷失敗的情況,歡迎留言,一起探討。

    總結

    以上所述是小編給大家介紹的Mysql 5.7.19 winx64 ZIP Archive 安裝及使用教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    用最簡單的方法判斷JavaScript中this的指向(推薦)

    用最簡單的方法判斷JavaScript中this的指向(推薦):都說 JavaScript 是一種很靈活的語言,這其實也可以說它是一個混亂的語言。它把 函數式編程 和 面向對象編程 糅合一起,再加上 動態語言 特性,簡直強大無比(其實是不能和C++比的,^_^ )。 JS 里的 this 在 function 內部被創建 指向調用時所在函數
    推薦度:
    標簽: 判斷 javascript this
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 中日精品无码一本二本三本| 91精品国产色综合久久| 骚片AV蜜桃精品一区| 国产精品成人啪精品视频免费| 亚洲国产婷婷综合在线精品| 99热精品久久只有精品| 精品人人妻人人澡人人爽人人| 久久伊人精品青青草原日本| 大胸国产精品视频| 精品少妇一区二区三区视频| 国产综合精品女在线观看| 伊人精品久久久久7777| 久久亚洲精品无码播放| 99在线精品免费视频| 亚洲色图国产精品| 狠狠色丁香婷婷综合精品视频| 91精品啪在线观看国产| 久久精品亚洲一区二区三区浴池| 婷婷久久精品国产| 好湿好大硬得深一点动态图91精品福利一区二区 | 亚洲精品WWW久久久久久| 国产成人无码精品久久久免费 | 国产精品三级在线观看无码| 亚洲国产精品无码久久| 色婷婷噜噜久久国产精品12p| 欧美精品人爱a欧美精品| 精品a在线观看| 久久免费99精品国产自在现线| 好湿好大硬得深一点动态图91精品福利一区二区 | 国产精品无码a∨精品| 无码精品国产VA在线观看| 亚洲欧美精品AAAAAA片| 亚洲人成电影网站国产精品| 香蕉依依精品视频在线播放 | 精品无码日韩一区二区三区不卡| 无码国产乱人伦偷精品视频| 午夜精品久久久久久久久| 久久亚洲国产成人精品性色| 国产精品免费大片| 国内精品51视频在线观看| 亚洲精品无码不卡|