欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序中為什么使用var that=this

 更新時(shí)間:2019年08月27日 11:46:46   作者:zxin1210  
這篇文章主要介紹了小程序中為什么使用var that=this的相關(guān)知識(shí),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言:

  在小程序或者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)文章

最新評(píng)論