JS设计模式 - var that = this;
程序员文章站
2022-07-14 21:36:34
...
小程序、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的变量。