微信小程序之this的指代
首先我们要搞清楚this是用来干嘛的,this就是用来指代当前的对象的,一般说来在哪个对象里那么就指代哪个
-
在微信中是使用this.setdata来修改data数据的,但是当我们使用wx.request时,我们得到的数据要在wx.request中的success方法中来调用的,所以现在问题来了,如果我们直接用this.setdata的话会出现什么结果呢?
由上图可知如果直接调用会报错,下面我们来分析一下为什么会报错 -
根据我之前阐述的,this是指代当前对象的,所以我们来看一下报错时this所指的对象是什么?
这里可以看出直接调用时,this.setdata的this指向的是_requestObject(这里的_requestObject就是传给wx.request方法的对象数组,如下图所示)
-
所以我们只有使用在Page函数里的那个对象才可以调用setdata方法,从而改变data数据的,也就是说让this指向下图这个对象时才可以调用setdata方法
-
所以我们通过 var that = this将Page函数中的对象保存,然后再通过that.setdata()来达到修改data数据的目的
综上所述,当遇到this指代的对象改变时,可以通过将其赋值给另一个变量来解决(当然js中this指代的情况很复杂,这里只是其中的一类情况)