箭头函数是怎么绑定this的? - CNode技术社区

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

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

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

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

7 回复

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

屏幕快照 2016年10月13日 下午6.42.44.png

看看这个 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

回到顶部

AltStyle によって変換されたページ (->オリジナル) /