摘要:尤其是函數調用模式更是一頭霧水。中的有一個特性就是運行期綁定不包括箭頭函數,所以可以是全局對象,當前對象或者任意對象,這完全取決于函數的調用方式函數調用模式中的以此模式調用函數時,會被綁定到全局對象。
之前讀語言精粹的時候一直對函數的調用的理解是模模糊糊,一知半解。尤其是 函數調用模式 更是一頭霧水。終于今天讓我遇到這個問題了,總算是對函數調用模式 和this 有了一個相對來說比較清楚的認識。
javascrit中的this有一個特性就是:運行期綁定(不包括箭頭函數),所以this可以是 全局對象,當前對象 或者 任意對象,這完全取決于函數的調用方式
函數調用模式中的this以此模式調用函數時, this 會被綁定到全局對象。這是一個語言上的設計錯誤。舉個栗子:
var Chat = { func1 () { //... this.func2() //這里會報錯: func2 is not a function } func2 () { //... } }
出現這種錯誤的原因就是,this 沒有綁定到Chat對象上,而是綁定到全局對象上了。導致,方法不能利用內部函數。
解決方法一:
var Chat = { func1 () { //定義一個變量that賦值給this,那么內部函數可以通過that訪問到this var that = this this.func2() } func2 () { //... } }
解決方法二:
var Chat = { func1 (){ Chat.func2() //誰的方法,誰調用 } func2 () { //... } }箭頭函數中的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()
首先根據 詞法作用域 ,由于它本身沒有this,于是便向上查找this。接下來,發現taskA是有this的,于是便直接繼承了taskA的作用域。
那么,問題來了:taskA的this又是什么呢?
taskA是一個普通函數,普通函數的this是在運行時決定的,由于我們是直接調用taskA的,即taskA(),所以其this便是window。所以,在這個例子中,arrow_fn中的this是window
所以,綜上所述:箭頭函數中的this是定義的時候就決定的。另外,還需要注意的一點是:它的 this 指向是不可改變的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84667.html
摘要:的值為以此模式調用函數時,被綁定到全局對象。在傳統的面向類的語言中,構造函數是類中的一些特殊方法,使用初始化類時會調用類中的構造函數。包括內置對象函數在內的所有函數都可以用來調用,這種函數調用被稱為構造函數調用。 調用一個函數會暫停當前函數的執行,傳遞控制權和參數給新函數。除了聲明時定義的形式參數,每個函數還接受兩個附加參數: this 和 arguments。參數 this 的值取決...
摘要:作為構造函數何為構造函數所謂構造函數就是用來對象的函數,像等都是全局定義的構造函數。正在跑步正在說話正在跑步正在說話如上,如果函數作為構造函數用,那么其中的就代表它即將出來的對象。 前言 總括:詳解JavaScript中的this的一篇總結,不懂this這個難點,很多時候會造成一些困擾,寫出一些bug不知如何收場,所以一起來寫bug吧,不對,一起來寫代碼吧。 原文地址:JavaScr...
摘要:網上看到一句話,匿名函數的執行是具有全局性的,那怎么具有的全局性呢閉包內部的指向是,為什么指向了呢下面通過函數調用模式和部分案例分析了為什么確實如此函數調用的模式方法調用模式和函數調用模式如果一個函數被設置為一個對象的屬性,則稱它為一個方法 網上看到一句話,匿名函數的執行是具有全局性的,那怎么具有的全局性呢?閉包內部this的指向是window,為什么指向了window呢?下面通過js...
摘要:網上看到一句話,匿名函數的執行是具有全局性的,那怎么具有的全局性呢閉包內部的指向是,為什么指向了呢下面通過函數調用模式和部分案例分析了為什么確實如此函數調用的模式方法調用模式和函數調用模式如果一個函數被設置為一個對象的屬性,則稱它為一個方法 網上看到一句話,匿名函數的執行是具有全局性的,那怎么具有的全局性呢?閉包內部this的指向是window,為什么指向了window呢?下面通過js...
摘要:網上看到一句話,匿名函數的執行是具有全局性的,那怎么具有的全局性呢閉包內部的指向是,為什么指向了呢下面通過函數調用模式和部分案例分析了為什么確實如此函數調用的模式方法調用模式和函數調用模式如果一個函數被設置為一個對象的屬性,則稱它為一個方法 網上看到一句話,匿名函數的執行是具有全局性的,那怎么具有的全局性呢?閉包內部this的指向是window,為什么指向了window呢?下面通過js...
閱讀 955·2021-11-17 09:33
閱讀 415·2019-08-30 11:16
閱讀 2468·2019-08-29 16:05
閱讀 3351·2019-08-29 15:28
閱讀 1393·2019-08-29 11:29
閱讀 1947·2019-08-26 13:51
閱讀 3385·2019-08-26 11:55
閱讀 1203·2019-08-26 11:31