国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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精品欧美一区二区三区 | 亚欧精品在线观看 | 啪啪免费入口网站 | 日本a级片免费观看 | 日韩一区二区三区精品 | 国产亚洲欧美精品久久久 | 日韩欧美一区二区三区在线 | 亚洲高清一区二区三区 | 九九啪 | 91综合| 成人精品一区二区三区 | 图片专区亚洲欧美另类 | 国产日韩一区二区三区 | 色综合天天娱乐综合网 | 国产剧情精品在线 | 亚洲v日韩v欧美在线观看 | 黄网站在线观看 | 亚洲欧美激情另类 | 免费国产va在线观看视频 | 国内精品1区1区3区4区 | 国产精品视频不卡 | 国产日韩一区二区三区在线观看 | 伊人久久影院 | 图片专区亚洲欧美另类 | 亚洲精品国产成人99久久 | 在线视频区 | 欧美日韩亚洲色图 | 国产一区二区三区在线观看视频 | 欧美v日韩v亚洲v最新 | 欧美一区二区三区不卡 | 成人精品视频在线观看完整版 | 欧美 国产 日韩 第一页 | 日韩欧美综合 | 免费国产叼嘿视频大全网站 | 最新国产精品视频免费看 |