对箭头功能感到困惑

时间:2016-11-16 11:03:40

标签: javascript arrow-functions

你能告诉我代码片段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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

箭头功能不允许绑定。检查MDN上的this参考:

  

与函数相比,箭头函数表达式的语法更短   表达式和不绑定它自己的,参数,超级或   new.target。

箭头功能会将this解析为其词法范围。

答案 2 :(得分:0)

箭头函数与普通函数不同,不应用作对象方法。除其他外,它们不会绑定'this'。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions