将对象保存在自身内部

时间:2018-06-09 12:18:42

标签: javascript object

为什么我可以存储一个物品作为它自己的财产?这是一个简单的例子:

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

这将导致拥有一个无限的对象树:我可以使用objobj.obj.obj.obj来调用obj.obj.obj.vobj.obj.obj.obj.obj

这是性能问题吗?它根本不会打扰浏览器。

实际上,当我在Chrome中查看控制台并点击展开obj的属性时(在 i 的工具提示上):

  

以下评估值刚刚

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

enter image description here

这是否意味着JavaScript在我实际访问它们之前也不会查看obj的属性?

obj.obj只是对obj的引用吗?

1 个答案:

答案 0 :(得分:2)

  

这是性能问题吗?

没有。循环引用与其他引用一样。每个类实例实际上都有一个循环引用:

instance.constructor.prototype.constructor.protototype
  

obj.obj只是对obj的引用吗?

  

这是否意味着JavaScript在我实际访问它们之前也不会查看obj的属性?

是。并且控制台不会尝试扩展它,因为它会陷入无限循环。