Javascript 对象属性名称的箭头函数的缩写

Javascript 对象属性名称的箭头函数的缩写,javascript,ecmascript-6,Javascript,Ecmascript 6,当我有: const foo = 1; 我可以设置对象属性名称的缩写 const bar = {foo} 那是一样的 const bar = {foo: foo} // bar will be {foo: 1} 当我有一个带有箭头函数的常量时,有没有速记 const foo = () => 1 我必须这样设置,但它不酷 const bar = {foo: foo()} 我想这样做,或者做更短的 const bar = {foo()} //bar should be {foo:

当我有:

const foo = 1;
我可以设置对象属性名称的缩写

const bar = {foo}
那是一样的

const bar = {foo: foo} // bar will be {foo: 1}
当我有一个带有箭头函数的常量时,有没有速记

const foo = () => 1
我必须这样设置,但它不酷

const bar = {foo: foo()}
我想这样做,或者做更短的

const bar = {foo()}  //bar should be {foo: 1} but this will fail

好的,我忘了还有箭头功能

因此,如果你喜欢这种速记的好处,你可以这样做

const foo = (() => 1)()
const bar = {foo}
缺点:你需要一个iLife查看,这里没有语法

在您的情况下,
ObjectLiteral
必须解析为
{PropertDefinitionList}
,它必须解析为
PropertyDefinition
。那么,
PropertyDefinition
可以是什么呢

它不能是
IdentifierReference
——这是您的第一个示例:
{f}

CoverInitializedName
也不太合适。这看起来像是定义了
AssignmentExpression
{f=AssignmentExpression}

PropertyName:AssignmentExpression
是常规语法:
{f:1}

MethodDefinition
允许您执行
{f(){return 1;},但这又不是你想要的


看起来判决是否定的。

对称性已经存在
{foo}
相当于
{foo:()=>1}
,即包含作为函数的属性foo的对象。例如,如果你愿意,你可以这样称呼它:

bar.foo();
您的请求似乎是使用新语法,该语法调用
foo
,并用结果填充
bar.foo
没有这样的语法。如果
foo
接受参数怎么办?如果
foo
是异步的(您希望使用
wait
then),该怎么办?您是如何得到与属性同名的函数的?如果没有经过演示的用例,就很难看到为这种模式进行优化的任何价值

简短并不总是更具可读性

如果有一组函数专用于为一组相同的命名属性提供结果,则可以使用帮助器构造某些内容,如:

constmapobj=(o,f)=>Object.assign({},…Object.keys(o).map(k=>({[k]:f(o[k])));
常量foo=()=>1;
常数fum=()=>2;
设bar=mapObj({foo,fum},f=>f());

log(JSON.stringify(bar))不,没有语法可以使它变短,但这看起来像一个。你到底想做什么?你有很多这样的功能吗?它们来自哪里?没有这样的语法。这个手术不需要。一个函数和属性的名称相同,这只是巧合。我只想获得与仅常量示例中相同的好处。5秒钟前有一个答案,这正是我想要的。它会回来吗Dwhich只是将foo设置为1为什么不直接执行
const foo=1
?这只是一个虚拟函数的示例。在现实生活中的作用更大complex@Luca好吧,我想你可以有一个非平凡的函数…但生命仍然是不必要的-只需进行运算并将结果赋给一个变量,无需创建一个新函数,只需在同一行上执行它并丢弃它。答案和问题一样好。在这种情况下你为什么需要在ES6生活?我们已经有了创建嵌套作用域的块。这是一个缺少的功能。但是感谢您查看正式规范,并以我希望的方式澄清为什么不可能。