export default {
methods: {
//方法1
a(){
setInterval(function () {
this.b(); //---不执行报错:this.b() is not a function---
},1000)
},
//方法2
b(){
console.log('调用成功')
}
}
}
在定时器中调用b 函数的时候报错,因为,this的指向问题。
定时器中的this指向window对象而非vue实例,在window对象中你并没有定义b()方法,自然会报错。
解决方法一:
使用箭头函数解决
a(){
setInterval(()=> {
this.b();
},1000)
},
解决方法二:
声明一个变量,存储一下this
a(){
let self = this;
setInterval(function () {
self.b();
},1000)
},
解决方法三:
利用bind改变this的指向
a(){
setInterval(function () {
this.b();
}.bind(this),1000)
}