小程序中 that和this用法

小程序中 that和this用法,第1张

解决办法 为复制一份this的指向到变量中,这样在函数执行过程中虽然this改变了,但是that还是指向之前的对象

大家知道this是指当前对象,只是一个指针,真正的对象存放在堆内存中,this的指向在程序执行过程中会变化,因此如果需要在函数中使用全局数据需要合适地将this复制到变量中。

this作用域分析:

1.在Page({})里面,this关键字指代Page({})整个对象

2.因此可以通过this关键字访问或者重新设置Page({})里data的变量

3.然而在loadData函数中使用了wx.request({})API这个方法导致在wx.request({})里没办法使用this来获取Page({})对象

4.虽然在wx.request({})里没法使用this获取Page({})对象,但是可以在wx.request({})外面先把this存在某个变量中,所以就有了 var that =this 这个声明。此时that指代Page({})整个对象,这样子就可以在wx.request({})里使用that访问或者重新设置Page({})里data的变量

微信小程序 setData常用错误解决办法:

1、微信小程序中,在wx.request({})方法调用成功或者失败之后,有时候会需要获取页面初始化数据data的情况,这个时候,如果使用,this.data来获取,会出现获取不到的情况,调试页面也会报undefiend。

原因是,在javascript中,this代表着当前对象,会随着程序的执行过程中的上下文改变,在wx.request({})方法的回调函数中,对象已经发生改变,所以已经不是wx.request({})方法对象了,data属性也不存在了。官方的解决办法是,复制一份当前的对象,如下:

var that=this//把this对象复制到临时变量that。在success回调函数中使用that.data就能获取到数据了。

2、下面就是修改代码,必须setData一下,不然地图不会刷新。

markers: {     iconPath:

"/picture/bike.png",     id: 0,     latitude: 23.099994,     longitude:

113.324520,     width: 50,     height: 50    }

for(var i = 0i <res.data.lengthi++){         //

that.data.markers[i].id=i         // mark.id=i        var param =

{}        var string = "markers["+i+"].id"        param[string] =

res.data[i].Bike_id                that.setData(param)           

var string="markers["+i+"].iconPath"        param[string]

="/picture/bike.png"        that.setData(param)            var

string = "markers["+i+"].latitude"        param[string] =

res.data[i].BIKE_latitude                that.setData(param)       

          var string = "markers["+i+"].longitude"       

param[string] = res.data[i].BIKE_longitude               

that.setData(param)                 var string =

"markers["+i+"].width"        param[string] = 50               

that.setData(param)             var string = "markers["+i+"].height"

       param[string] = 50                that.setData(param)       

 /* that.setData({          markers:[{     iconPath:

"/picture/bike.png",     id: 0,     latitude: 23.099994,     longitude:

113.324520,     width: 50,     height: 50          }]         })*/      

  }       //   console.log(res.data[1])         var

markk=that.data.markers        that.setData({markers:markk})

小程序setData()设置,百度找到:   http://www.jb51.net/article/111691.htm

在微信小程序中,可以利用 `setInterval()` 函数来实现长时间计时的功能。

具体步骤如下:

1. 在需要计时的页面或组件中定义一个计时器变量,如 `timer`,并初始化为 0。

2. 使用 `setInterval()` 函数,在一段时间间隔内执行一次指定的函数(比如每秒钟执行一次),并将返回值赋给计时器变量,如:

```

timer = setInterval(function() {

// 在这里编写计时器的逻辑

}, 1000)// 以毫秒为单位,表示每秒钟执行一次

```

3. 在计时器函数中编写计时器的逻辑,如:

```

var second = 0// 定义一个秒数变量

function timerFunction() {

second++// 每秒钟秒数加一

console.log("已经计时了 " + second + " 秒")

}

```

4. 当需要停止计时器时,可以使用 `clearInterval()` 函数来清除计时器,如:

```

clearInterval(timer)// 停止计时器

```

完整示例代码:

```

var timer// 计时器变量

Page({

data: {

second: 0 // 秒数

},

onLoad: function () {

this.startTimer()// 页面加载时启动计时器

},

startTimer: function () {

var that = this

timer = setInterval(function() {

that.setData({

second: that.data.second + 1 // 每秒钟秒数加一

})

console.log("已经计时了 " + that.data.second + " 秒")

}, 1000)// 以毫秒为单位,表示每秒钟执行一次

},

stopTimer: function () {

clearInterval(timer)// 停止计时器

}

})

```


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8152935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存