例如,给定此对象:
let foo = {foo:1};
let bar = {a:foo,b:foo};
我们可以将bar
定义为单个表达式,方法是将其写为:
let bar = (($0)=>({a:$0={foo:1},b:$0}))()
但是,考虑到这个目标:
let o = {a:'perfect'};
o.circle = o;
是否可以使用单个表达式重新创建o
的结构?
这不起作用:
(($0)=>($0={a:"perfect",circle:$0}))()
因为嵌套circle
并且尚未定义$0
。
答案 0 :(得分:1)
除非你想用getter属性来解决这个问题,否则分配是不可避免的。
即使在单个表达式中,也有各种方法可以做到这一点:
let o = (o = {a:'perfect'}).circle = o;
但我建议关注清晰度并改用IIFE:
const o = (function(){
const x = {a:'perfect'};
x.circle = x;
return x;
}());
// more like the first solution but without the mutable `o` variable:
const o = (x => x.circle = x)({a:'perfect'});