首先讓我麼看一些**,先不要往下看,你自己先想一下這裡的this分別指的是什麼。
接下來讓我們一齊**,上面的**中有4個this,我們接下來就來**一下這些this分別指的是什麼內容。
其實注意觀察,我們可以把上面******現的this簡單分為3類:
(一)鉤子函式中的this;
created鉤子函式
created() ,
(二)methods中普通函式中的this;
methods中的showmsg普通函式
showmsg() , 1000)
},
(三)methods中箭頭函式中的this;
methods中的showmsg箭頭函式
showmsg2() , 2000)
},
接下來我們就來分析以上三種this分別指向的是什麼?
1.在vue官方文件中寫道:
在vue所有的生命週期鉤子方法(如created,mounted, updated以及destroyed)裡使用this,this指向呼叫它的vue例項
這一句話可謂是蓋棺定論的一句,不會有任何特殊情況發生。因此,以後我們遇到寫在任意乙個鉤子函式中的this的時候,它們都毫無例外地指向我們自己的vue例項。所以:
created() ,
2.對於第二類this,我們可以先看一下它的輸出結果:
showmsg() , 1000)
},
輸出的結果為全域性變數,從這裡我們可以看出這裡的this指的已經不是我們的vm例項了,如果是vm例項就不應該是這個結果。我們知道,對於普通函式(包括匿名函式)this指的是其直接呼叫者,也就是說誰呼叫了我這個函式,this指的就是誰。而且在非嚴格模式下(『use strict』),如果沒有直接呼叫者,this指的就是window.
我們可以在以上**中加上一段,驗證一下:
...$('#id3').html('我是id3' + this.msg)
我在頁面中又新增了乙個p標籤,並且在vm例項外新增
$(』#id3』).html(『我是id3』 + this.msg)
其輸出結果為 === 『我是id3我是window下的msg』,這裡的this預設指向的就是window,所以對於第二類this,指向的也是window
3.第三類this,同樣先看一下其輸出結果
showmsg2() , 2000)
},
這裡很明確地表明,此處的this指的是我們的vue例項vm,所以該類this指的就是vm例項,不是window.這是因為在箭頭函式中沒有自己的this,它的指向步驟可以概括為兩步:
(1)找到定義函式的上下文(即包含箭頭函式最近的函式或者物件),這裡就是showmsg2()函式了;
(2)上下文所處的父上下文即為this,showmsg2()函式位於vm例項中的methods中,this自然指的就是我們的vm例項,所以第三類this指的就是vue例項。
好了,以上也是我自己的小小的總結,希望對大家有一點點幫助吧!喜歡就好評點讚收藏****關注吧。。。
Vue中this的指向問題
在vue中通常會用this去呼叫在vue原型上的方法。handlesubmit2 ev requestlogin loginparams then data data if code 200 else else 我在函式體內寫了乙個this.router.push table 方法,其主要目的是為了...
Vue解惑 axios中this的指向問題
axios 是乙個基於 promise 的 http 庫,可以用在瀏覽器和 node.js 中。在進行vue實驗時,需要用到axios進行介面請求,並將返回的內容傳遞到vue的data選項中。正常情況下,會使用this.list response.data的格式進行賦值,但this的指向恰恰是最容易...
vue在axios中 this 指向問題
在vue中使用axios做網路請求的時候,會遇到this不指向vue,而為undefined,可以使用箭頭函式 來解決。如下 methods then function response catch error es6中的 箭頭函式 內部的this是詞法作用域,由上下文確定 也就是由外層呼叫者vue...