parent-child 关系并在 object 查看器中导航
parent-child relationships and navigating in object viewer
当我查看写在 JavaScript 中的 parent-child 关系时,您可以无限地浏览 object,这是一个问题吗?
以下为例
class Parent {
constructor() {
this.child = null;
}
}
class Child {
constructor() {
this.parent = null;
}
}
let p1 = new Parent();
let c1 = new Child();
p1.child = c1;
c1.parent = p1;
当在 Chrome 中查看此 object 时,在 object 中导航时,您可以无限地迭代它,这很明显为什么但这是不好的做法是否有另一种编码方式 parent / child 关系 JavaScript?
child -> parent -> child -> parent -> child -> parent -> child -> 等等...
这是传递对象的自然效果by reference, rather than by value.
const x = {
a: 'INITIAL',
b: 'INITIAL',
}
const y = {
x,
cloneX: { ...x }
}
console.log(y)
x.a = 'CHANGED'
console.log(y)
从问题和您的评论来看,这听起来好像对您来说不是特别新鲜。
但是我们可以知道变量是通过引用传递的,一旦您认为 parent/child 值只是指针,您在控制台中看到的内容就相当自然就能继续关注他们了。
但这并不意味着会存在任何类型的内存问题,因为代码不会保留无限系列的对象副本;每个只存储一个引用,在这种情况下它恰好是循环的。
当我查看写在 JavaScript 中的 parent-child 关系时,您可以无限地浏览 object,这是一个问题吗?
以下为例
class Parent {
constructor() {
this.child = null;
}
}
class Child {
constructor() {
this.parent = null;
}
}
let p1 = new Parent();
let c1 = new Child();
p1.child = c1;
c1.parent = p1;
当在 Chrome 中查看此 object 时,在 object 中导航时,您可以无限地迭代它,这很明显为什么但这是不好的做法是否有另一种编码方式 parent / child 关系 JavaScript?
child -> parent -> child -> parent -> child -> parent -> child -> 等等...
这是传递对象的自然效果by reference, rather than by value.
const x = {
a: 'INITIAL',
b: 'INITIAL',
}
const y = {
x,
cloneX: { ...x }
}
console.log(y)
x.a = 'CHANGED'
console.log(y)
从问题和您的评论来看,这听起来好像对您来说不是特别新鲜。
但是我们可以知道变量是通过引用传递的,一旦您认为 parent/child 值只是指针,您在控制台中看到的内容就相当自然就能继续关注他们了。
但这并不意味着会存在任何类型的内存问题,因为代码不会保留无限系列的对象副本;每个只存储一个引用,在这种情况下它恰好是循环的。