2016-07-22 47 views
3

我有一个简单的函数(一个阵营组件内):如何返回带有胖箭头功能的对象而不重新绑定?

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

但我想胖arrowify它:

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

除了我得到一个错误,因为毕竟胖箭头手段{一段代码返回undefined(除非你明确return东西)。至少这是我一开始就想到的。但我认为this现在正在绑定该胖箭头功能,现在this.propsundefined

所以我试试这个:

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

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

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

+0

箭头函数保留上下文,但是当你使用'new'时它会重置'this',因此你会得到错误。如果你想要这个工作,你可以回到ES5 hack'var self = this' – Rajesh

+0

它被称为“箭头函数”,而不是“胖箭头函数” – naomik

回答

3

用括号括起来,像这样

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

没有括号,对象文字看上去也像一个标签,一个JavaScript块称为它text。由于它不明确,所以引发了SyntaxError。但是当你用()包围它时,JavaScript知道它是一个对象字面值。


我觉得这是现在正在绑定到箭头功能

箭函数没有this。当在箭头函数中遇到this时,它将转到上一级以查看this是否在那里可用并使用它。可以确认,这样

(function Test1() { 
    console.log(this); 
    (() => console.log(this))(); 
}).bind({a: 1})(); 

将打印

{ a: 1 } 
{ a: 1 } 

在你的情况,this将把在声明它的功能,而不是对象本身的this对象。