成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

函數(shù)調(diào)用模式中的this

itvincent / 1013人閱讀

摘要:尤其是函數(shù)調(diào)用模式更是一頭霧水。中的有一個(gè)特性就是運(yùn)行期綁定不包括箭頭函數(shù),所以可以是全局對(duì)象,當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式函數(shù)調(diào)用模式中的以此模式調(diào)用函數(shù)時(shí),會(huì)被綁定到全局對(duì)象。

之前讀語言精粹的時(shí)候一直對(duì)函數(shù)的調(diào)用的理解是模模糊糊,一知半解。尤其是 函數(shù)調(diào)用模式 更是一頭霧水。終于今天讓我遇到這個(gè)問題了,總算是對(duì)函數(shù)調(diào)用模式this 有了一個(gè)相對(duì)來說比較清楚的認(rèn)識(shí)。

javascrit中的this有一個(gè)特性就是:運(yùn)行期綁定(不包括箭頭函數(shù)),所以this可以是 全局對(duì)象,當(dāng)前對(duì)象 或者 任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式

函數(shù)調(diào)用模式中的this

以此模式調(diào)用函數(shù)時(shí), this 會(huì)被綁定到全局對(duì)象。這是一個(gè)語言上的設(shè)計(jì)錯(cuò)誤。舉個(gè)栗子:

var Chat = {
    func1 () {
        //...
        this.func2()    //這里會(huì)報(bào)錯(cuò): func2 is not a function
     }
    func2 () {
        //...
    }
}

出現(xiàn)這種錯(cuò)誤的原因就是,this 沒有綁定到Chat對(duì)象上,而是綁定到全局對(duì)象上了。導(dǎo)致,方法不能利用內(nèi)部函數(shù)。

解決方法一:

var Chat = {
    func1 () {
        //定義一個(gè)變量that賦值給this,那么內(nèi)部函數(shù)可以通過that訪問到this
        var that = this      
        this.func2()    
     }
    func2 () {
        //...
    }
}

解決方法二:

var Chat = {
    func1 (){
        Chat.func2()      //誰的方法,誰調(diào)用  
     }
    func2 () {
        //...
    }
}
箭頭函數(shù)中的this
function taskA() {
  this.name = "hello"

  var fn = function() {
    console.log(this)
    console.log(this.name)
  }

  var arrow_fn = () => {
    console.log(this)
    console.log(this.name)
  }
  fn()
  arrow_fn()
}
taskA()

首先根據(jù) 詞法作用域 ,由于它本身沒有this,于是便向上查找this。接下來,發(fā)現(xiàn)taskA是有this的,于是便直接繼承了taskA的作用域。

那么,問題來了:taskA的this又是什么呢?
taskA是一個(gè)普通函數(shù),普通函數(shù)的this是在運(yùn)行時(shí)決定的,由于我們是直接調(diào)用taskA的,即taskA(),所以其this便是window。所以,在這個(gè)例子中,arrow_fn中的this是window

所以,綜上所述:箭頭函數(shù)中的this是定義的時(shí)候就決定的。另外,還需要注意的一點(diǎn)是:它的 this 指向是不可改變的

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84667.html

相關(guān)文章

  • JavaScript 中this在不同調(diào)用模式中的差異

    摘要:的值為以此模式調(diào)用函數(shù)時(shí),被綁定到全局對(duì)象。在傳統(tǒng)的面向類的語言中,構(gòu)造函數(shù)是類中的一些特殊方法,使用初始化類時(shí)會(huì)調(diào)用類中的構(gòu)造函數(shù)。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。 調(diào)用一個(gè)函數(shù)會(huì)暫停當(dāng)前函數(shù)的執(zhí)行,傳遞控制權(quán)和參數(shù)給新函數(shù)。除了聲明時(shí)定義的形式參數(shù),每個(gè)函數(shù)還接受兩個(gè)附加參數(shù): this 和 arguments。參數(shù) this 的值取決...

    wuyangnju 評(píng)論0 收藏0
  • JavaScript中的this

    摘要:作為構(gòu)造函數(shù)何為構(gòu)造函數(shù)所謂構(gòu)造函數(shù)就是用來對(duì)象的函數(shù),像等都是全局定義的構(gòu)造函數(shù)。正在跑步正在說話正在跑步正在說話如上,如果函數(shù)作為構(gòu)造函數(shù)用,那么其中的就代表它即將出來的對(duì)象。 前言 總括:詳解JavaScript中的this的一篇總結(jié),不懂this這個(gè)難點(diǎn),很多時(shí)候會(huì)造成一些困擾,寫出一些bug不知如何收?qǐng)?,所以一起來寫bug吧,不對(duì),一起來寫代碼吧。 原文地址:JavaScr...

    SimpleTriangle 評(píng)論0 收藏0
  • 匿名函數(shù)以及閉包內(nèi)部this指向(函數(shù)調(diào)用模式的問題)

    摘要:網(wǎng)上看到一句話,匿名函數(shù)的執(zhí)行是具有全局性的,那怎么具有的全局性呢閉包內(nèi)部的指向是,為什么指向了呢下面通過函數(shù)調(diào)用模式和部分案例分析了為什么確實(shí)如此函數(shù)調(diào)用的模式方法調(diào)用模式和函數(shù)調(diào)用模式如果一個(gè)函數(shù)被設(shè)置為一個(gè)對(duì)象的屬性,則稱它為一個(gè)方法 網(wǎng)上看到一句話,匿名函數(shù)的執(zhí)行是具有全局性的,那怎么具有的全局性呢?閉包內(nèi)部this的指向是window,為什么指向了window呢?下面通過js...

    yy736044583 評(píng)論0 收藏0
  • 匿名函數(shù)以及閉包內(nèi)部this指向(函數(shù)調(diào)用模式的問題)

    摘要:網(wǎng)上看到一句話,匿名函數(shù)的執(zhí)行是具有全局性的,那怎么具有的全局性呢閉包內(nèi)部的指向是,為什么指向了呢下面通過函數(shù)調(diào)用模式和部分案例分析了為什么確實(shí)如此函數(shù)調(diào)用的模式方法調(diào)用模式和函數(shù)調(diào)用模式如果一個(gè)函數(shù)被設(shè)置為一個(gè)對(duì)象的屬性,則稱它為一個(gè)方法 網(wǎng)上看到一句話,匿名函數(shù)的執(zhí)行是具有全局性的,那怎么具有的全局性呢?閉包內(nèi)部this的指向是window,為什么指向了window呢?下面通過js...

    _Zhao 評(píng)論0 收藏0
  • 匿名函數(shù)以及閉包內(nèi)部this指向(函數(shù)調(diào)用模式的問題)

    摘要:網(wǎng)上看到一句話,匿名函數(shù)的執(zhí)行是具有全局性的,那怎么具有的全局性呢閉包內(nèi)部的指向是,為什么指向了呢下面通過函數(shù)調(diào)用模式和部分案例分析了為什么確實(shí)如此函數(shù)調(diào)用的模式方法調(diào)用模式和函數(shù)調(diào)用模式如果一個(gè)函數(shù)被設(shè)置為一個(gè)對(duì)象的屬性,則稱它為一個(gè)方法 網(wǎng)上看到一句話,匿名函數(shù)的執(zhí)行是具有全局性的,那怎么具有的全局性呢?閉包內(nèi)部this的指向是window,為什么指向了window呢?下面通過js...

    remcarpediem 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

itvincent

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<