欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS设计模式 - var that = this;

程序员文章站 2022-07-14 21:36:34
...

JS设计模式 - var that = this;

小程序、vue、uniapp的回调函数中广泛用到了“var that = this”,ajax的success回调函数中也曾用到“var that =this”,那么var that=this到底有什么作用呢?
js中,this代表着当前的对象,它在程序中随着执行的上下文随时会变化,即随着操作不同的dom对应的数值会对应发生变化。

_init: function(orderId) {
   console.log(orderId)
   var that = this;
   //这里声明了that;将this存在that里面.
   $.ajax({
     url: '/order/orderInfo.do',
     type:"post",
     dataType:"json",
     data: { orderId: orderId },
     success: function (res) {
       console.log(res)
       var order = res.data.data
       var good = res.data.data.orderGoodsInfoList
          //下单时间
          var addtime_info = that._timeFormat(order.addTime)
          order.addtime_info = addtime_info
          //订单状态
          var orderstatus_info = that._statusFormat(order.orderStatus) //这里使用了that,这样就可以获取Page({})对象
          order.orderstatus_info = orderstatus_info
         that.setData({
           order: order,
           good: good,
           orderStatus: order.orderStatus,
           orderstatus_info: orderstatus_info
         })
     }
  })
}

小程序的Page({ })里面,this关键字指代Page({ })整个对象,然而在_init函数中使用了 $ .ajax({ }) API这个方法导致在 $ .ajax({ })里没办法使用this来获取Page({ })对象this对象,在程序中随时会改变,而var that = this; 之后,that不会改变,仍然指向之前的this,这样就不会找不到原来的对象。
虽然在 $ .ajax({ })里没法使用this获取Page({ })对象,但是可以在 $ .ajax({ })外面先把this存在某个变量中,所以就有了 var that =this; 这个声明。此时that指代Page({ })整个对象,这样子就可以在 $ .ajax里使用that访问或者重新设置Page({ })里data的变量。

相关标签: JS设计模式