中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何在vue和小程序中使用this方法-創(chuàng)新互聯(lián)

這篇文章給大家介紹如何在vue和小程序中使用this方法,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設、固始網(wǎng)站維護、網(wǎng)站推廣。

匿名函數(shù)下的this

方便本地demo,沒有使用webpack

引入兩個文件,vue和axios

axios返回一個promise對象,我們通過axios進行ajax請求

 <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!
    })
  }
 }
})

不必關心axios請求的接口返回的數(shù)據(jù)

那么在axios下,輸出的是=>我是全局message!,為什么呢?我們是想輸出=>”我是vue下的message!”

在這里有那么一些人就蒙了,為什么axios下會這樣呢?

axios有話說:

如何在vue和小程序中使用this方法

出現(xiàn)這種情況,不是axios的鍋,

不信你往下看

//其他代碼省略
 getData() {
  setTimeout(function () {
   console.log(this.message);//=>我是全局message!
  }, 1000);
 }
}

我們將getData方法下的axios請求換掉,用一個定時器替代,其他部分保持不變

輸出依然是=>我是全局message!

為什么?

因為

匿名函數(shù)下this指向window

至于原因, 這里解釋的很清楚https://www.zhihu.com/question/21958425

你只需要記住一點,默認情況下,匿名函數(shù)this指向window

如何處理匿名函數(shù)下this指向的問題呢?

通過bind來處理

結合之前所學,我們可以同bind來進行處理

//部分代碼省略
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,同樣可以實現(xiàn)我們所希望的效果

如果你的項目支持ES6標準,那么

箭頭函數(shù)是你最佳選擇

getData() {
 axios.get('https://easy-mock.com/mock/5b0525349ae34e7a89352191/example/promise1')
  .then(() => {
   console.log(this.message);
  })
}

我們在之前的文章中總結過一個結論

this的指向是在函數(shù)執(zhí)行的時候定義的,而不是在函數(shù)創(chuàng)建時定義的,this指向的是最后調用它的對象

我們接下來本篇文章的另一個知識點

箭頭函數(shù)中的this

看一個栗子

var heroName = '黃蓉';
var heroObj = {
 heroName: '郭靖',
 callName: function () {
  console.log(this.heroName)//=>郭靖
 }
}
heroObj.callName();

this指向最后調用它的對象,所以輸出=>郭靖

再看下箭頭函數(shù)的栗子

var heroName = '黃蓉';
var heroObj = {
 heroName: '郭靖',
 callName: () => {
  console.log(this.heroName)//=>黃蓉
 }
}
heroObj.callName();

對這個輸出結果感到意外嗎?

不管懵沒懵,我們再看一個栗子

var heroName = '黃蓉';
function getHeroName() {
 this.heroName = '郭靖'
 const foo = () => {
  console.log(this.heroName)//=>郭靖
 }
 foo();
}
getHeroName();

放在一起做一下比較:

普通函數(shù):this的指向是在函數(shù) 執(zhí)行 的時候綁定的,而不是在函數(shù) 創(chuàng)建 時綁定的

箭頭函數(shù):this的指向是在函數(shù) 創(chuàng)建 的時候綁定的,而不是在函數(shù) 執(zhí)行 時綁定的。

不管在什么情況下,箭頭函數(shù)的this跟外層function的this一致,外層function的this指向誰,箭頭函數(shù)的this就指向誰,如果外層不是function則指向window。

ES6中定義的時候綁定的this是繼承的父執(zhí)行上下文里面的this

小程序中的this

如果項目中的小程序也支持ES6標準,無疑,使用箭頭函數(shù)是一個不錯的選擇

//省略。。。
 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}`
     })
    }
   }
  })
 }

很多場景就不需要緩存中轉this

var that = this//使用箭頭函數(shù)替代此方案

合理的使用this會使我們事半功倍

關于如何在vue和小程序中使用this方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

名稱欄目:如何在vue和小程序中使用this方法-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.rwnh.cn/article48/csepep.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、網(wǎng)站策劃、響應式網(wǎng)站、品牌網(wǎng)站設計、搜索引擎優(yōu)化網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
赫章县| 化德县| 建始县| 荔浦县| 永昌县| 司法| 贵南县| 沙洋县| 陈巴尔虎旗| 忻城县| 子洲县| 开阳县| 衡水市| 黄石市| 阳朔县| 额济纳旗| 平塘县| 温州市| 河曲县| 双辽市| 栾川县| 开鲁县| 长汀县| 攀枝花市| 阿鲁科尔沁旗| 景宁| 甘南县| 海盐县| 通渭县| 天全县| 宁蒗| 福鼎市| 军事| 都兰县| 兴和县| 景谷| 拉孜县| 沐川县| 和龙市| 聂拉木县| 郴州市|