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

歡迎訪問 生活随笔!

生活随笔

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

vue

Vue实例里this的使用

發布時間:2025/4/16 vue 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue实例里this的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

要理解Vue實例里this的使用,首先要理解this在JavaScript里的用法,可以參考理解JavaScript普通函數以及箭頭函數里使用的this。

這是vue文檔里的原話:

All?lifecycle?hooks?are?called?with?their?'this'?context?pointing?to?the?Vue?instance?invoking?it.

意思是:在Vue所有的生命周期鉤子方法(如created,mounted,?updated以及destroyed)里使用this,this指向調用它的Vue實例。

示例分析

<!DOCTYPE?html> <html> <head><meta?charset="UTF-8"><title></title><script?src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script><script?src="https://unpkg.com/vue@2.5.9/dist/vue.js"></script> </head> <div?id="app"?style="width:?100%;height:?auto;font-size:20px;"><p?id="id1"></p><p?id="id2"></p> </div> <script?type="text/javascript">var?message?=?"Hello!";var?app?=?new?Vue({el:"#app",data:{message:?"你好!"},created:?function()?{this.showMessage1();????//this?1this.showMessage2();???//this?2},methods:{showMessage1:function(){setTimeout(function()?{document.getElementById("id1").innerText?=?this.message;??//this?3},?10)},showMessage2:function()?{setTimeout(()?=>?{document.getElementById("id2").innerText?=?this.message;??//this?4},?10)}}}); </script> </html>

示例定義了兩個message。一個是全局變量,即window.message,它的值為英文“Hello!”。另外一個是vue實例的數據message,它的值為中文的“你好!”。

運行示例,在瀏覽器得到:

第一個輸出英文"Hello!”,第二個輸出中文“你好!”。這說明了showMessage1()里的this指的是window,而showMessage2()里的this指的是vue實例。

created

created:?function()?{this.showMessage1();????//this?1this.showMessage2();???//this?2 }

created函數為vue實例的鉤子方法,它里面使用的this指的是vue實例。

showMessage1()

showMessage1:function(){setTimeout(function()?{document.getElementById("id1").innerText?=?this.message;??//this?3},?10) }

對于普通函數(包括匿名函數),this指的是直接的調用者,在非嚴格模式下,如果沒有直接調用者,this指的是window。showMessage1()里setTimeout使用了匿名函數,this指向window。

showMessage2()

showMessage2:function()?{setTimeout(()?=>?{document.getElementById("id2").innerText?=?this.message;??//this?4},?10) }

箭頭函數是沒有自己的this,在它內部使用的this是由它定義的宿主對象決定。showMessage2()里定義的箭頭函數宿主對象為vue實例,所以它里面使用的this指向vue實例。

綁定vue實例到this的方法

為了避免this指向出現歧義,有兩種方法綁定this。

使用bind

showMessage1()可以改為:

showMessage1:function(){setTimeout(function()?{document.getElementById("id1").innerText?=?this.message;??//this?3}.bind(this),?10) }

對setTimeout()里的匿名函數使用bind()綁定到vue實例的this。這樣在匿名函數內的this也為vue實例。

把vue實例的this賦值給另一個變量再使用

showMessage1()也可以改為

showMessage1:function(){var?self?=?this;setTimeout(function()?{document.getElementById("id1").innerText?=?self.message;??//改為self}.bind(this),?10) }

這里吧表示vue實例的this賦值給變量self。在使用到this的地方改用self引用。

轉載于:https://my.oschina.net/jack088/blog/2251579

總結

以上是生活随笔為你收集整理的Vue实例里this的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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