当事物以可无限访问的方式相互引用时,是否存在任何性能问题或事情需要解决?
这是一个例子......
var Foo = function () {
var self = this;
this.setBar = function (bar) {
self.bar = bar;
self.bar.foo = self;
}
};
var Bar = function () {};
var foo = new Foo();
var bar = new Bar();
foo.setBar(bar);
// infinite references!
console.log(foo.bar.foo.bar.foo);
答案 0 :(得分:1)
需要注意的一些问题:
JSON.stringify()
。实际上,JSON格式本身不允许指定循环引用。JSON.stringify()
的任何功能,以便序列化数据和/或通过网络发送扁平化对象。Set
或Map
对象透明地比使用ES5更容易。只要您没有陷入其中一个循环迭代或需要用JSON表示您的数据结构,那么它没有什么特别的错误 - 有时它只是权宜之计做事。
浏览器本身有很多这样的循环引用的例子。例如,整个DOM将此作为父项指向子项和子项指向父项。
node.firstChild.parentNode.firstChild.parentNode.firstChild.parentNode === node
答案 1 :(得分:1)
您遇到的唯一问题是,您无法将其转换为JSON格式,但就是这样。
事实上,浏览器已经出现过这种情况。 global object
有一个名为window
的属性,它引用全局对象。
所以..
window.window.window.window.window === window