var b = { c:10, fn:() => {this.c} } console.log(b.fn()); 为什么这里显示undefined的呢,有点搞不明白
箭头函数的this是定义时绑定,普通函数是运行时绑定。
var b = {
c:10,
fn() {return this.c}
}
还有一个问题。如果是想让箭头函数默认返回,那就不要加大括号。。。。
()=>{10} //undefined
()=>10 //10
@oyosc 我觉得核心还是那句话:函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
把你的代码换个写法。
var b = {
c: 10
}
b.fn = ()=> {return this.c}
b.fn()
我是怎么理解的,箭头函数依然是定义在module范围内的,只是赋值给了b.fn
。所以this.c 拿到到会是module的this.c。
Ps:就像 alanyang说的,你如果要fn返回this.c,那么要么去掉{}, 要么在里面加入return。
@raymonife 好吧,不过我问的是undefined的原因,这个不是什么函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象引起的问题。这样的回答等于没说,实际原因是箭头函数暂时不能用作对象方法
这样结了一个贴,以后还有千千万万个贴 在node命令行下执行这行代码看看
var c = 123; var b = { c:10, fn:() => this.c }; console.log(b.fn());
@oyosc 嗯,刚才误导了,其实你的问题的就是1楼回答的问题。后面的回复是针对“不能使用箭头函数做对象方法”这个结论。 还是建议你在chrome console或者在命令行下执行js代码,在node里this是很容易搞混的,特别是用了箭头函数的时候