2019-03-25 记录一个关于this的问题

前几日看了一些关于防抖的文章,今早在自己项目实现时,发现一个问题,代码如下

data () {
  return {
    button: true 
  }
}
save () {
  if (this.button == true) {
    this.button = false
    //处理保存事件
  }
  setTimeout(function () {
    this.button = true
  }, 2000)
}

初始代码是这样的,结果导致点击按钮之后,只处理一次事件,定时器虽然也走了,
但是button的结果就一直是 false。
经过测试发现,setTimeout里的this对象指向的时window,
而其他this对象指向的时VueComponent
为了解决这个问题,将代码修改成这样:

data () {
  return {
    button: true 
  }
}
save () {
const vm = this
  if (vm.button == true) {
    vm.button = false
    //处理保存事件
  }
  setTimeout(function () {
    vm.button = true
  }, 2000)
}

这样就解决了对象不一致的问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 1,197评论 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,933评论 1 45
  • 在面向对象的语言中(例如Java,C#等),this含义是明确且具体的,即指向当前对象。一般在编译期绑定。而在ja...
    一木_qintb阅读 420评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,173评论 1 32
  • 参考链接 this 关键字 深入理解上下文this 慕课视频 基本含义 以上示例中实际都是执行的showName方...
    day_day_up阅读 872评论 2 3