重构校园招聘网站出现的this问题

  • cindy Liu
  • 0 Minutes
  • August 15, 2018

1.在vue项目中的js代码语法与之前使用js和jquery还是有所出入的,现项目校园招聘手机前端重构 遇到一个点击按钮出现倒计时60s的效果
setTimeOut,就是一个定时器,

2.按照最原始的倒计时效果,实现如下:
//获取30s 控制操作倒计时

time(){
if(this.timeWait <= 0){
    this.timeWait = 0;
    return
}else{
    this.timeWait--;
}
setTimeout(function(){
    this.time();
},1000)}

此处出现了错误,报错信息为time未定义,此处对于定时器方法其实并没有错
3.原因是老生常谈的javaScript 的this 的问题。
因为用的一个
function(){
}
这里的 独立的作用域 this指向了全局(这里是window)而且window里没有time这个函数报了错。

4.基本vue中都是this.XXX这样写。这里的this是Vue对象。所以为了使this正确指向vue,我用了ES6的尖头函数。

setTimeout(() => {
this.time();
}, 1000)

尖头函数因为它的特殊性,它的this指向它外层的对象。