最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

this在vue和小程序中的使用詳解

 更新時(shí)間:2019年01月28日 09:21:20   作者:陌上寒  
這篇文章主要介紹了this在vue和小程序中的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

匿名函數(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);
  })
}

我們在之前的文章中總結(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é)果感到意外嗎?

不管懵沒懵,我們再看一個(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}`
     })
    }
   }
  })
 }

很多場景就不需要緩存中轉(zhuǎn)this

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

合理的使用this會(huì)使我們事半功倍

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue跳轉(zhuǎn)頁簽傳參并查詢參數(shù)的保姆級(jí)教程

    vue跳轉(zhuǎn)頁簽傳參并查詢參數(shù)的保姆級(jí)教程

    這篇文章主要介紹了vue跳轉(zhuǎn)頁簽傳參并查詢參數(shù)的保姆級(jí)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • vue中l(wèi)et that=this的作用及說明

    vue中l(wèi)et that=this的作用及說明

    這篇文章主要介紹了vue中l(wèi)et that=this的作用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue中百度地圖定位及附近搜索功能使用步驟

    vue中百度地圖定位及附近搜索功能使用步驟

    這篇文章主要為大家介紹了vue中百度地圖定位及附近搜索功能使用步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Vue+Websocket簡單實(shí)現(xiàn)聊天功能

    Vue+Websocket簡單實(shí)現(xiàn)聊天功能

    這篇文章主要為大家詳細(xì)介紹了Vue+Websocket簡單實(shí)現(xiàn)聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue中的生命周期及鉤子函數(shù)

    vue中的生命周期及鉤子函數(shù)

    這篇文章主要介紹了vue中的生命周期及鉤子函數(shù),Vue?實(shí)例有一個(gè)完整的生命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載?Dom、渲染,下面文章詳細(xì)介紹,需要的朋友可以參考一下
    2021-12-12
  • vue-router命名視圖的使用講解

    vue-router命名視圖的使用講解

    今天小編就為大家分享一篇關(guān)于vue-router命名視圖的使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法

    Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法

    這篇文章主要介紹了Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 淺談VUE監(jiān)聽窗口變化事件的問題

    淺談VUE監(jiān)聽窗口變化事件的問題

    下面小編就為大家分享一篇淺談VUE監(jiān)聽窗口變化事件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue 封裝防刷新考試倒計(jì)時(shí)組件的實(shí)現(xiàn)

    Vue 封裝防刷新考試倒計(jì)時(shí)組件的實(shí)現(xiàn)

    這篇文章主要介紹了Vue 封裝防刷新考試倒計(jì)時(shí)組件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • element-ui表格如何自適應(yīng)高度效果示例

    element-ui表格如何自適應(yīng)高度效果示例

    這篇文章主要給大家介紹了關(guān)于element-ui表格如何自適應(yīng)高度的相關(guān)資料,Element UI的Table組件默認(rèn)情況下是沒有自適應(yīng)高度的,文中給大家介紹了解決的辦法,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

大英县| 原平市| 余庆县| 白河县| 苍溪县| 五大连池市| 贡嘎县| 花莲县| 鄂州市| 石楼县| 井研县| 施甸县| 泰安市| 榕江县| 普兰店市| 沙洋县| 来凤县| 神池县| 桃源县| 宜兰县| 东乌珠穆沁旗| 安龙县| 萨迦县| 昌图县| 大姚县| 郸城县| 阿巴嘎旗| 久治县| 华坪县| 乡城县| 龙胜| 疏勒县| 广水市| 翁牛特旗| 龙山县| 顺昌县| 改则县| 绥中县| 陆良县| 内乡县| 深州市|