亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 12:12:39
字體:
來源:轉載
供稿:網友

匿名函數下的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請求的接口返回的數據

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

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

axios有話說:

出現這種情況,不是axios的鍋,

不信你往下看

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

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

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

為什么?

因為

匿名函數下this指向window

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

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

如何處理匿名函數下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); }}

在匿名函數之前,我們先將this賦值給that,在匿名函數中使用that來替代原來的this,同樣可以實現我們所希望的效果

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

箭頭函數是你最佳選擇

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

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

this的指向是在函數執行的時候定義的,而不是在函數創建時定義的,this指向的是最后調用它的對象

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

箭頭函數中的this

看一個栗子

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

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

再看下箭頭函數的栗子

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();

放在一起做一下比較:

普通函數:this的指向是在函數 執行 的時候綁定的,而不是在函數 創建 時綁定的

箭頭函數:this的指向是在函數 創建 的時候綁定的,而不是在函數 執行 時綁定的。

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

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

小程序中的this

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

//省略。。。 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//使用箭頭函數替代此方案

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品在线观| 中文字幕亚洲欧美日韩在线不卡| 久久久人成影片一区二区三区观看| 综合av色偷偷网| 久久久久久91香蕉国产| 91视频8mav| 成人疯狂猛交xxx| 欧美亚洲成人精品| 久久这里有精品视频| 亚洲国产精品系列| 原创国产精品91| 亚洲电影av在线| 蜜臀久久99精品久久久久久宅男| 中文字幕日韩av综合精品| 亚洲美女免费精品视频在线观看| 欧美亚洲视频在线看网址| 中文字幕日韩在线观看| 国产欧美日韩专区发布| 久久综合伊人77777蜜臀| 成人免费淫片aa视频免费| 2019国产精品自在线拍国产不卡| 一本一本久久a久久精品综合小说| 欧美在线视频a| 国产成人在线播放| 日本一本a高清免费不卡| 在线免费看av不卡| 国产精品电影久久久久电影网| 麻豆国产va免费精品高清在线| 亚洲精品美女网站| 色婷婷成人综合| 成人国产精品久久久| 欧美精品免费看| 国产99久久精品一区二区 夜夜躁日日躁| 97视频在线观看网址| 日韩精品视频在线观看免费| 97精品久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲国产精品推荐| 91精品国产自产在线观看永久| 成人国产精品久久久久久亚洲| 欧美色欧美亚洲高清在线视频| 亚洲欧美激情在线视频| 亚洲欧美中文日韩在线| 精品久久在线播放| 欧美亚洲日本网站| 欧美理论片在线观看| 欧美成人剧情片在线观看| 国产欧美久久久久久| 欧美成人免费网| 国产午夜精品视频免费不卡69堂| 成人h视频在线| 国产精品亚洲一区二区三区| 久久成人人人人精品欧| 久久久欧美一区二区| 亚洲三级 欧美三级| 国产综合视频在线观看| 亚洲人成在线播放| 精品小视频在线| 久久午夜a级毛片| 日韩欧美国产视频| 久久久亚洲网站| 国产精品日韩欧美| 国产经典一区二区| 欧美极品少妇xxxxⅹ裸体艺术| 91国产精品视频在线| 视频在线一区二区| 久久成年人视频| 精品一区二区三区四区在线| 国产成人精品优优av| 精品国内产的精品视频在线观看| 成人精品一区二区三区电影黑人| 亚洲老板91色精品久久| 91亚洲精华国产精华| 亚洲综合精品一区二区| 国内精久久久久久久久久人| 一区二区三区四区在线观看视频| 国产女人18毛片水18精品| 国产精品嫩草影院一区二区| 久久国产精品99国产精| 色青青草原桃花久久综合| 欧美在线一区二区视频| 久久久久久久亚洲精品| 欧美电影免费观看网站| 中文字幕精品国产| 麻豆成人在线看| 蜜臀久久99精品久久久无需会员| 亚洲欧美日韩中文在线| 国产丝袜精品视频| 91精品国产综合久久香蕉最新版| 精品日本美女福利在线观看| 成人久久精品视频| 日韩欧美一区二区三区久久| 国产在线观看不卡| 亚洲精品小视频| 亚洲激情在线观看视频免费| 一区二区在线视频| 亚洲网站在线看| 国产欧美婷婷中文| 亚洲精品美女在线观看播放| 久久97精品久久久久久久不卡| 国产精品视频成人| 国产成人精品视频在线观看| 国产综合香蕉五月婷在线| 欧美成人精品xxx| 精品视频偷偷看在线观看| 亚洲va国产va天堂va久久| 欧美精品videossex性护士| 欧美激情在线有限公司| 91大神在线播放精品| 7777精品视频| 国产成人免费av电影| 欧美日韩国产精品一区二区三区四区| 亚洲国产成人在线播放| 亚洲精品在线看| 国产亚洲精品久久| 色诱女教师一区二区三区| 91久久精品国产91久久性色| 日本伊人精品一区二区三区介绍| 欧美激情第三页| 在线观看国产精品日韩av| 国产欧美精品一区二区三区-老狼| 国产精品电影观看| 亚洲自拍小视频免费观看| 国产欧美中文字幕| 一区二区欧美亚洲| 深夜福利日韩在线看| 亚洲精品美女在线观看播放| 国产丝袜一区二区三区| 精品偷拍一区二区三区在线看| 久久精品中文字幕电影| 精品国产福利视频| 亚洲欧美综合精品久久成人| 搡老女人一区二区三区视频tv| 精品久久久久久中文字幕一区奶水| 在线精品播放av| 中文字幕日韩综合av| 日韩美女激情视频| 国产精品久久久久久久久久尿| 日韩国产一区三区| 91av在线看| 亚洲国产精品网站| 欧美亚洲国产日韩2020| 亚洲午夜av久久乱码| 久久久久久91| 色系列之999| 欧美国产日韩免费| 国产一区二区三区在线免费观看| 国产精品永久免费在线| 欧美激情视频给我| 一区二区三区 在线观看视| 欧美日韩在线观看视频| 欧美精品18videos性欧| 日韩av理论片| 欧美性猛交xxxxx免费看| 日韩精品丝袜在线| 国产日韩在线播放| 亚洲区一区二区| 91社区国产高清| 成人一区二区电影| 日韩国产在线看| 精品电影在线观看| 98精品在线视频| 亚洲精品999| 国产视频久久久|