在微信小程序开发中,遇到这样一个小问题:
当声明dom事件时,一般来说是这样的:
isFunction:function(){
this.setData({
......
})
}
但由于个人习惯,我喜欢使用箭头函数来进行声明:
isFunction:()=>{
......
}
但是在箭头函数中去进行变量赋值时,this.setData却报了错
反应过来箭头函数this的指向不同
1.箭头函数本身不创建this 也可以说箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。 注意:this一旦被捕获,就不再发生变化
var webName="捕获成功";
let func=()=>{
console.log(this.webName);
}
func();
运行结果如下:
捕获成功
代码分析:箭头函数在全局作用域声明,所以它捕获全局作用域中的this,this指向window对象。
var name = "a";
function wrap(){
this.name="b";
let func=() => {
console.log(this.name);
}
func();
}
let en=new wrap();
运行结果如下:
b
代码分析:
(1)wrap()用作构造函数。
(2)使用new调用wrap()函数之后,此函数作用域中的this指向创建的实例化对象。
(3)箭头函数此时被声明,捕获这个this。
(4)所以打印的是a,而不是b。
所以,当想要在箭头函数中进行数据赋值时:
isFunction:()=>{
let that = this;
that.setData({
......
})
}
如有问题或指正,请在评论区指出,敲字不易,点个赞再走吧~ 侵删