阮一峰老师在他的文章中说,箭头函数的this就是定义时所在的对象,然后我们的小白同学很Happy的写下了如下代码:
var obj={
num:1,
counter:()=>this.num++
}
obj.counter();
console.log(obj.num)
复制代码
他期望的结果是2,然而结果始终是1,问题出现在哪里呢?
问题就在于JS中对于对象没有一个明确的表述,上面小白用字面量方法创建的obj是一个对象,而阮一峰老师文章的对象指的是函数,所以就出现了理解偏差。
箭头函数的this总结起来就一句话:不管在什么情况下,箭头函数的this跟外层function的this一致,外层function的this指向谁,箭头函数的this就指向谁,如果外层不是function则指向window
var obj={
id:123,
testFun:function(){
var a= ()=>console.log(this.id)
a();
}
}
//testFun的this指的是obj,则箭头函数的this指向obj。
obj.testFun()
//testFun的this指向window,箭头函数的this指向window。
obj.testFun.apply(null)
复制代码
转载于:https://juejin.im/post/5b3c32cee51d4519634f7f4b