Vue例項中this的指向問題

2021-09-26 04:36:50 字數 1666 閱讀 2880

首先讓我麼看一些**,先不要往下看,你自己先想一下這裡的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...