当前位置: 代码网 > it编程>前端脚本>Vue.js > setTimeout在vue中的正确使用方式

setTimeout在vue中的正确使用方式

2024年05月19日 Vue.js 我要评论
settimeout在vue中的正确使用笔者最近因为公司需求开发使用vue和jquery开发抓娃娃h5极简小游戏,使用到settimeout函数。遇到了1个坑在vue的某个方法(点击后执行)setti

settimeout在vue中的正确使用

笔者最近因为公司需求开发使用vue和jquery开发抓娃娃h5极简小游戏,使用到settimeout函数。

遇到了1个坑

在vue的某个方法(点击后执行)

settimeout(this.end(),4000);//娃娃消失

这里奇怪的是,end方法的确被执行了。但是没有执行4s后执行的效果。那我要你合用呢!其实,问题还是出在笔者身上,大家请看下图

settimeout的定义和用法。

问题出在我的格式上面

其实是支持两种调用方式:1 字符 2 函数体(文章解决方式)

解决方法如下:

1、定义一个_this暂存this

2、再改变变量的值,则生效啦

3、方法中将this存在变量_this中,此时执行settimeout函数时,settimeout函数内的_this就会访问到这个变量,就会得到当前对象。

export default {
 
 methods: {
 
  start: function () {
  
   let _this=this
   settimeout(function()  {
 
    _this.end()//娃娃消失
 
   }, 4000);
 
  }
 
 }
 
}

注意:

当在vue中使用定时器在function里直接使用this,发现没有效果,这是由于settimeout函数调用的代码运行在与所在函数完全分离的执行环境上,这会使得this指向的是window对象。

拓展知识:

解决vue在settimeout内修改this失效

要想settimeout指向正确的值,可以使用如下方法:

使用箭头函数

export default {
 
 methods: {
 
  start: function () {
 
   settimeout(() => {
 
    this.end()//娃娃消失
 
   }, 4000);
 
  }
 
 }
 
}

此时函数的this指向的是定义它的时候的对象,也就是this指向了data内中对应的变量。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com