Javascript 如何用一个表达式定义递归对象?

Javascript 如何用一个表达式定义递归对象?,javascript,Javascript,例如,给定此对象: let foo = {foo:1}; let bar = {a:foo,b:foo}; let o = {a:'perfect'}; o.circle = o; 我们可以将bar定义为一个表达式,方法是将其写成: let bar = (($0)=>({a:$0={foo:1},b:$0}))() 然而,鉴于这一目标: let foo = {foo:1}; let bar = {a:foo,b:foo}; let o = {a:'perfect'}; o.circ

例如,给定此对象:

let foo = {foo:1};
let bar = {a:foo,b:foo};
let o = {a:'perfect'};
o.circle = o;
我们可以将
bar
定义为一个表达式,方法是将其写成:

let bar = (($0)=>({a:$0={foo:1},b:$0}))()
然而,鉴于这一目标:

let foo = {foo:1};
let bar = {a:foo,b:foo};
let o = {a:'perfect'};
o.circle = o;
是否可以用一个表达式重新创建
o
的结构


这行不通:

(($0)=>($0={a:"perfect",circle:$0}))()

因为
是嵌套的,并且
$0
已经定义。

除非您想用getter属性解决这个问题,否则赋值是不可避免的

有各种各样的方法可以做到这一点,即使是在一个表达式中:

let o = (o = {a:'perfect'}).circle = o;
但我建议你把重点放在清晰性上,用生活来代替:

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'});

使用
Object.assign()
能做你想做的事吗?我觉得有可能。
({…$0={a:'perfect'},圆圈:$0})
。使用
对象。根据需要分配
。我真的不明白你为什么需要这个。@AndrewLi这不会创建一个引用循环,只会导致与
{a:'perfect',circle:{a:'perfect'}}
@Bergi哦,我明白了。他们想要
circle
也在
circle
属性中?@AndrewLi是的,我想是的<代码>对象。赋值($0={a:'perfect'},{circle:$0})
可以做到这一点。