wx的this和that

347 阅读1分钟

1.出现的问题

小程序中,会遇到,使用this的时候会报错,比如下面这段代码,把isBinding从本地缓存中取出来,通过isBinding的值判断是新用户还是老用户


 openPages: function(){
      wx.getStorage({
        key: 'isBinding',
        success (res) {
          console.log("dkdkdkkdk,",res.data)
          if(res.data === false){//true是老用户,则跳过,直接进去
            console.log("我是老用户================")
            this.setData({openApage: true});
          }else{
            wx.navigateTo({
              url: '/pages/user/newUser/newUser',
            })
          }
        }
      })
  },

结果报错了,报错如下:

image.png

2.问题的原因

无法找到setData这个定义,使用this.setData获取不到,this代表当前对象,会随着程序执行时候的上下文改变,方法的getStorage方法的回调函数中,对象已经变了,

3.解决方法

目前能想到的解决办法就是复制一份当前对象,用that代替当时的this

 openPages: function(){
      let that = this;
      wx.getStorage({
        key: 'isBinding',
        success (res) {
          console.log("dkdkdkkdk,",res.data)
          if(res.data === false){//true是老用户,则跳过,直接进去
            console.log("我是老用户================")
            that.setData({openApage: true});
          }else{
            wx.navigateTo({
              url: '/pages/user/newUser/newUser',
            })
          }
        }
      })
  },

这样做至少能解决当前的问题。

今天就到这了,主要是把遇到问题解决掉,然后稍微总结记录一下。