循环常量,让图声明...如何解决?

时间:2019-02-01 23:38:48

标签: javascript ecmascript-6 scope hoisting

好吧,大脑冻结了……我需要帮助来完成这项工作:

const a = {
  val: 'a',
  neighbor: d
}

const b = {
  val: 'b',
  neighbor: a
}

const c = {
  val: 'c',
  neighbor: b
}

const d = {
  val: 'd',
  neighbor: c
}

console.log('d: neighbor - > ', d.neighbor)
console.log('a: neighbor - > ', a.neighbor)

const a 必须指向 const d ,但不幸的是 const d 是在 const a 之后定义的。在大多数情况下,我可以将const a移到 const d 之后定义,但是在这种情况下,需要在 const c 之后定义const d 。我想念什么...?谢谢

2 个答案:

答案 0 :(得分:3)

声明所有对象没有的“ neighbor”属性,然后在以后的单独分配中添加它。

const a = {
    val: 'a'
}

const b = {
    val: 'b'
}


const c = {
    val: 'c'
}

const d = {
    val: 'd'
}

a.neighbor = d;
b.neighbor = a;
c.neighbor = b;
d.neighbor = c;

答案 1 :(得分:1)

您可以将neighbor属性定义为吸气剂。 getter实际上是一个函数,当您检索对象的值时即会执行该函数,也就是说,此时已定义了所有引用的对象。这样,您还可以保护neighbor属性以防意外更改。

const a = {
    val: 'a',
    get neighbor () {return d;}
};
const b = {
    val: 'b',
    get neighbor () {return a;}
};
const c = {
    val: 'c',
    get neighbor () {return b;}
};
const d = {
    val: 'd',
    get neighbor () {return c;}
};

console.log('d: neighbor - > ' , d.neighbor);
console.log('a: neighbor - > ' , a.neighbor);