日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue中this的指向问题

發布時間:2023/12/16 vue 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue中this的指向问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Vue中this指向

最近一直在做畢業設計,學習了Vue用來寫了很多的前端代碼,不得不說js對我這個“Java前端程序員”有些太不友好,時不時都能遇到一些坑,this就是其中之一。

1 問題代碼

為了凸顯問題,簡化了代碼,outerFunction調用了innerFunction,outerFunction中的消息提示框能夠顯示出來,而innerFunction中就提示:this.$message is not a function。這是什么問題呢?

export default {data() { // ...},methods: {outerFunction() {this.$message({type: 'success',message: 'outer!'});this.$options.methods.updateHandler();},innerFunction() {this.$message({type: 'success',message: 'inner!'});}} }

在簡化之后可能很容易就發現了問題應該出在this上,而當時由于代碼太多了,我誤以為是其他代碼或則Element UI提供的message組件出了問題,在其他地方繞了些時間。所以這也是在提醒我們排查bug時先注釋掉無關代碼!!!

js里的this和我想當然的this天差地別,誤以為this始終是指向全局的。其實this的指向是動態的,是根據上下文來確定的(參考文章:徹底理解js中this的指向)。

2 正確的寫法

經過分析可知,outerFunction()中的this是指向全局的沒有問題,而innerFunction中的this并不是指向全局的,其實是指向methods(下面我們就能看到),所以自然不能夠訪問到$message()方法。我們改寫innerFunction()讓它能夠指向全局:

export default {data() { // ...},methods: {testFunction() {console.log('test');}outerFunction() {this.$message({type: 'success',message: 'outer!'});this.$options.methods.updateHandler(this);},innerFunction(_this) {// 注意_this_this.$message({type: 'success',message: 'inner!'});// 輸出testthis.testFunction();}} }

通過將outerFunction()中的this指針傳遞給innerFunction()就可以了,非常簡單和實用!

3 總結

寫js還是不能夠用寫java的思維模式去寫,就像這次一樣,覺得自己this的用法完全沒有問題,但實則錯得徹徹底底,容易掉到坑里去。不過這也是不去先了解語言細節,直接開搞的惡果,導致走很多的彎路,有點難受。

總結

以上是生活随笔為你收集整理的Vue中this的指向问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。