箭头函数是怎么绑定this的?
发布于 4 年前 作者 elevensky 4520 次浏览 来自 问答

看了不少资料,但是还是不太明白下面getField函数是从哪个角度来看绑定到了全局变量。

var obj = {
  field: 'hello',
  getField: () => {
    console.log(this.field)
  }
}

this是在它当前定义的词法作用域内找,obj里是有this的,getField定义在一个对象里按说obj这个this离他最近啊,怎么绑到全局上去了呢? 总感觉是我理解的角度不对。

7 回复

《你不知道的Javascript上卷》-第一部分-附录C-this词法 应该能解释你的疑问

看看这个 http://www.cnblogs.com/snandy/p/4403111.html 注意点中的3 箭头函数this固定,不再善变

这个确实容易造成误解。

关键是理解“对象字面量”语法。对象字面量中的方法所处的Context,就是这个对象在定义时所处的那个Context,也就是全局Context。

来自酷炫的 CNodeMD

var obj = {  
    array: [1, 2, 3],
    sum: () => {
        console.log(this === window); // => true
        return this.array.reduce((result, item) => result + item);
    }
};

// Throws "TypeError: Cannot read property 'reduce' of undefined"
obj.sum();  
var obj = {  
    array: [1, 2, 3],
    sum() {
        console.log(this === obj); // => true
        return this.array.reduce((result, item) => result + item);
    }
};

obj.sum(); // => 6  

来自:https://segmentfault.com/a/1190000007074846

@all 谢谢大家。 @manxisuo 您这么说我点懂了,对象字面量中的方法所处的Context,就是这个对象在定义时所处的那个Context

回到顶部