2016-11-16 116 views
0

请问您能告诉我什么是snippet 1的错误?我对obj.discover()的期望输出是3.我怎样才能将this绑定到对象的箭头函数方法?对箭头功能感到困惑

'use strict' 

// Snippet 1 
var obj = { 
    data: 3, 
    discover:() => { 
    return this.data 
    } 
} 
obj.discover() // -> undefined 
obj.discover.bind(obj)() // undefined 

// but if I don't use the arrow notation, everything works 
// Snippet 2 
var obj2 = { 
    data: 3, 
    discover: function(){ 
    return this.data 
    } 
} 
obj2.discover() // -> 3 
+2

箭头函数没有自己的'this',使用该函数的常规函数​​ –

回答

2

箭头函数不仅仅是一个语法糖,而且在某些行为上也有所不同。在箭头函数中,this始终指向函数定义时指向的对象。

+1

值得指出的是,在OP中,'this'是'obj'中'discover'创建时的全局对象。如果它是使用'new'等创建的对象,那么在这个箭头函数中使用'this'就可以。 –

+0

@JamesThorpe谢谢你的详细解释。 – anhldbk

+1

@dejavu_cmd_delt:非常感谢。 – anhldbk

0

箭头函数不允许绑定。检查MDN this参考:相对于功能 表情和不绑定自己的这个,参数,超,或 new.target

箭头函数表达式有一个较短的语法。

箭头函数会将this解析为其词汇范围。