前言:
在小程序或者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)網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注