背景
最近在写微信小程序的时候突然遇到了报错说'setData'没有定义一开始还蛮惊讶的想这个怎么会没有定义,后来去网上找了一下发现了问题所在。
原理
因为我是使用了一个回调函数所以问题并不是出现在'setData'上而是前面的this上,因为在标准函数中this引用的是把函数当作方法调用的上下文对象因此this的指向对象不同,所以当然会报错。
解决
1.用that来代替this(不推荐)
这个方法是我在网上找的解决了我多年的疑问为什么要特定义var that = this但是我本人使用了这个方法并没有解决问题希望有知道的大佬能帮帮忙。
2.使用es6的箭头函数
示例:
(err, data)=>{
console.log(data,'上传成功')
this.setData({
location:this.data.location.concat(data.Location)
})
}
因为在箭头函数中,this引用的是定义箭头函数的上下文所以在事件回调或定时回调中调用某个函数时可以使用箭头函数解决this指向问题,这是因为在箭头函数中this会保留定义该函数的上下文。