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