如何在没有重新绑定的情况下返回具有胖箭头功能的对象?

时间:2016-07-22 06:27:24

标签: javascript ecmascript-6 this arrow-functions

我有一个简单的函数(在React组件中):

getInitialState: function() {
  return {
    text: this.props.text
  }
}

但我想胖了它:

getInitialState: () => {
    text: this.props.text
}

除了我收到错误,因为胖箭头后面的{表示返回undefined的代码块(除非你明确return某事)。至少这是我一开始的想法。但我认为this现在受限于胖箭头功能,现在this.propsundefined

所以我试试这个:

getInitialState: () => new Object({
    text: this.props.text
})

但是我得到了同样的错误,this.props未定义。

所以我想我有2个问题,我很好奇。首先,从简单的语句胖箭头函数返回对象的惯用方法是什么?其次,如何返回一个引用周围上下文的this对象的对象?

1 个答案:

答案 0 :(得分:3)

用括号括起来,就像这样

StackLayout

没有括号,对象文字看起来也像一个带有标签<StackLayout Orientation="Horizontal" HeightRequest="90" VerticalOptions="Start"> <Button Text="Button1" /> <Button Text="Button2" /> <Button Text="Button4" /> <Button Text="Button5" /> <Button Text="Button6" /> </StackLayout> 的JavaScript块。由于它不明确,因此抛出SyntaxError。但当你用getInitialState: () => ({ text: this.props.text }) 包围它时,JavaScript知道它是一个Object文字。

  

我认为现在这个箭头函数受到了限制

箭头功能没有text。在箭头函数中遇到()时,它将转到上一级,以查看this是否可用并使用它。您可以像这样确认

this

会打印

this

在您的情况下,(function Test1() { console.log(this); (() => console.log(this))(); }).bind({a: 1})(); 将引用声明它的函数的{ a: 1 } { a: 1 } 对象,而不是对象本身。