微信小程序中為什么使用var that=this
前言:
在小程序或者js開(kāi)發(fā)中,經(jīng)常需要使用var that = this;開(kāi)始我以為是無(wú)用功,(原諒我的無(wú)知),后來(lái)從面向?qū)ο蟮慕嵌纫幌刖兔靼琢?,下面?jiǎn)單解釋一下我自己的理解,歡迎指正批評(píng)。
代碼示例:
Page({ data: { test:10 }, testfun1: function () { console.log(this.data.test) // 10 function testfun2(){ console.log(this.data.test) //undefined } testfun2() }, })
第一個(gè)this.data.test
打印結(jié)果為10,原因是因?yàn)閠his的指向是包含自定義函數(shù)testfun1()的Page對(duì)象。
第二個(gè)打印語(yǔ)句實(shí)際上會(huì)報(bào)錯(cuò),原因是在函數(shù)testfun2()中,this指向已經(jīng)發(fā)生改變,也不存在data屬性,會(huì)error:Cannot read property 'data' of undefined;
解決辦法 為復(fù)制一份this的指向到變量中,這樣在函數(shù)執(zhí)行過(guò)程中雖然this改變了,但是that還是指向之前的對(duì)象。
testfun1: function () { var that = this console.log(this.data.test) // 10 function testfun2() { console.log(that.data.test) // 10 } testfun2() }, onLoad:function(){ this.testfun1(); }
編譯之后沒(méi)有報(bào)錯(cuò),正常打印出結(jié)果;
再來(lái)一項(xiàng)更明白的例子:
onLoad: function() { var testvar = { name: "zxin", testfun3: function() { console.log(this.name); } } testvar.testfun3(); }
編譯后輸出結(jié)果:zxin。this.name指的是testvar對(duì)象,testfun3()也屬于testvar對(duì)象。
總結(jié):
大家知道this是指當(dāng)前對(duì)象,只是一個(gè)指針,真正的對(duì)象存放在堆內(nèi)存中,this的指向在程序執(zhí)行過(guò)程中會(huì)變化,因此如果需要在函數(shù)中使用全局?jǐn)?shù)據(jù)需要合適地將this復(fù)制到變量中。
以上所述是小編給大家介紹的微信小程序中為什么使用var that=this,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Bootstrap媒體對(duì)象學(xué)習(xí)使用
這篇文章主要為大家詳細(xì)介紹了Bootstrap媒體對(duì)象的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03在Google 地圖上實(shí)現(xiàn)做的標(biāo)記相連接
這篇文章主要介紹了在Google 地圖上實(shí)現(xiàn)做的標(biāo)記相連接,需要的朋友可以參考下2015-01-01js判斷當(dāng)前瀏覽器類(lèi)型,判斷IE瀏覽器方法
這篇文章主要介紹了js判斷當(dāng)前瀏覽器類(lèi)型,判斷IE瀏覽器方法,需要的朋友可以參考下2014-06-06JavaScript原生數(shù)組函數(shù)實(shí)例匯總
這篇文章主要介紹了JavaScript原生數(shù)組函數(shù)實(shí)例匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10基于bootstrap實(shí)現(xiàn)bootstrap中文網(wǎng)巨幕效果
這篇文章主要介紹了基于bootstrap實(shí)現(xiàn)bootstrap中文網(wǎng)巨幕效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05js確認(rèn)刪除對(duì)話(huà)框適用于a標(biāo)簽及submit
這篇文章主要介紹的是一個(gè)js確認(rèn)刪除對(duì)話(huà)框適用于a標(biāo)簽及submit,非常好用,需要的朋友不要錯(cuò)過(guò)2014-07-07詳解JavaScript對(duì)象轉(zhuǎn)原始值
這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12