這篇文章給大家介紹如何在vue和小程序中使用this方法,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)頁空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、固始網(wǎng)站維護(hù)、網(wǎng)站推廣。匿名函數(shù)下的this
方便本地demo,沒有使用webpack
引入兩個(gè)文件,vue和axios
axios返回一個(gè)promise對(duì)象,我們通過axios進(jìn)行ajax請(qǐng)求
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <body> <div id="app"> {{ message }} </div> </body>
看下js部分
var message = '我是全局message!'; var app = new Vue({ el: '#app', data() { return { message: '我是vue下的message!' } }, created() { this.getData() }, methods: { getData() { axios.get('https://easy-mock.com/mock/5b0525349ae34e7a89352191/example/promise1') .then(function () { console.log(this.message);//=>我是全局message! }) } } })
不必關(guān)心axios請(qǐng)求的接口返回的數(shù)據(jù)
那么在axios下,輸出的是=>我是全局message!,為什么呢?我們是想輸出=>”我是vue下的message!”
在這里有那么一些人就蒙了,為什么axios下會(huì)這樣呢?
axios有話說:
出現(xiàn)這種情況,不是axios的鍋,
不信你往下看
//其他代碼省略 getData() { setTimeout(function () { console.log(this.message);//=>我是全局message! }, 1000); } }
我們將getData方法下的axios請(qǐng)求換掉,用一個(gè)定時(shí)器替代,其他部分保持不變
輸出依然是=>我是全局message!
為什么?
因?yàn)?/p>
匿名函數(shù)下this指向window
至于原因, 這里解釋的很清楚https://www.zhihu.com/question/21958425
你只需要記住一點(diǎn),默認(rèn)情況下,匿名函數(shù)this指向window
如何處理匿名函數(shù)下this指向的問題呢?
通過bind來處理
結(jié)合之前所學(xué),我們可以同bind來進(jìn)行處理
//部分代碼省略 created() { this.getData() }, methods: { getData() { setTimeout(function () { console.log(this.message);//=>我是vue下的message! }.bind(this), 1000); } }
通過bind可以改變this的指向,這是一中解決方式
還有一種比較常用
this賦值暫存
created() { this.getData() }, methods: { getData() { const that = this setTimeout(function () { console.log(that.message);//=>我是vue下的message! }, 1000); } }
在匿名函數(shù)之前,我們先將this賦值給that,在匿名函數(shù)中使用that來替代原來的this,同樣可以實(shí)現(xiàn)我們所希望的效果
如果你的項(xiàng)目支持ES6標(biāo)準(zhǔn),那么
箭頭函數(shù)是你最佳選擇
getData() { axios.get('https://easy-mock.com/mock/5b0525349ae34e7a89352191/example/promise1') .then(() => { console.log(this.message); }) }
我們?cè)谥暗奈恼轮锌偨Y(jié)過一個(gè)結(jié)論
this的指向是在函數(shù)執(zhí)行的時(shí)候定義的,而不是在函數(shù)創(chuàng)建時(shí)定義的,this指向的是最后調(diào)用它的對(duì)象
我們接下來本篇文章的另一個(gè)知識(shí)點(diǎn)
箭頭函數(shù)中的this
看一個(gè)栗子
var heroName = '黃蓉'; var heroObj = { heroName: '郭靖', callName: function () { console.log(this.heroName)//=>郭靖 } } heroObj.callName();
this指向最后調(diào)用它的對(duì)象,所以輸出=>郭靖
再看下箭頭函數(shù)的栗子
var heroName = '黃蓉'; var heroObj = { heroName: '郭靖', callName: () => { console.log(this.heroName)//=>黃蓉 } } heroObj.callName();
對(duì)這個(gè)輸出結(jié)果感到意外嗎?
不管懵沒懵,我們?cè)倏匆粋€(gè)栗子
var heroName = '黃蓉'; function getHeroName() { this.heroName = '郭靖' const foo = () => { console.log(this.heroName)//=>郭靖 } foo(); } getHeroName();
放在一起做一下比較:
普通函數(shù):this的指向是在函數(shù) 執(zhí)行 的時(shí)候綁定的,而不是在函數(shù) 創(chuàng)建 時(shí)綁定的
箭頭函數(shù):this的指向是在函數(shù) 創(chuàng)建 的時(shí)候綁定的,而不是在函數(shù) 執(zhí)行 時(shí)綁定的。
不管在什么情況下,箭頭函數(shù)的this跟外層function的this一致,外層function的this指向誰,箭頭函數(shù)的this就指向誰,如果外層不是function則指向window。
ES6中定義的時(shí)候綁定的this是繼承的父執(zhí)行上下文里面的this
小程序中的this
如果項(xiàng)目中的小程序也支持ES6標(biāo)準(zhǔn),無疑,使用箭頭函數(shù)是一個(gè)不錯(cuò)的選擇
//省略。。。 getLocation() { wx.chooseLocation({ success: res => { if (res.address && res.name) { this.setData({ shopAddress: `${res.address}(${res.name})` }) } else if (res.address) { this.setData({ shopAddress: `${res.address}` }) } } }) }
很多場(chǎng)景就不需要緩存中轉(zhuǎn)this
var that = this//使用箭頭函數(shù)替代此方案
合理的使用this會(huì)使我們事半功倍
關(guān)于如何在vue和小程序中使用this方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
名稱欄目:如何在vue和小程序中使用this方法-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://vcdvsql.cn/article48/csepep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、響應(yīng)式網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容