代码之家  ›  专栏  ›  技术社区  ›  Ivan Jeffrey Zhao

在自身内部保存对象

  •  1
  • Ivan Jeffrey Zhao  · 技术社区  · 6 年前

    为什么我可以存储一个对象作为它自己的财产?下面是一个简单的例子:

    let obj = {};
    obj['obj'] = obj;
    

    这将导致有无限的对象树:我可以调用 obj 具有 obj.obj.obj.obj 或者甚至 obj.obj.obj.vobj.obj.obj.obj.obj .

    这是性能问题吗?它似乎一点也不困扰浏览器。

    实际上,当我在chrome中查看控制台并单击以展开 OBJ 的属性(在 ):

    评估以下价值 刚才

    所以当我点击展开的时候他们被评估了。

    enter image description here

    这是否意味着javascript也不会考虑 OBJ 直到我真正接触到他们?

    obj.obj 只是参考一下 OBJ ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ivan Jeffrey Zhao    6 年前

    这是性能问题吗?

    不,循环引用和其他引用一样。每个类实例实际上都有一个循环引用:

    instance.constructor.prototype.constructor.protototype
    

    obj.obj 只是参考一下 obj ?

    对。

    这是否意味着javascript也不会考虑 OBJ 直到我真正接触到他们?

    对。控制台不会试图扩展它,因为它会陷入一个无止境的循环。