摘要:尤其是函數(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
摘要:的值為以此模式調(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 的值取決...
摘要:作為構(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...
摘要:網(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...
摘要:網(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...
摘要:網(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...
閱讀 980·2021-11-17 09:33
閱讀 435·2019-08-30 11:16
閱讀 2498·2019-08-29 16:05
閱讀 3374·2019-08-29 15:28
閱讀 1422·2019-08-29 11:29
閱讀 1975·2019-08-26 13:51
閱讀 3415·2019-08-26 11:55
閱讀 1239·2019-08-26 11:31