每当我将任何 javascript对象记录到浏览器中时,我都希望通过扩展控制台窗口中的内容来探索它, 正如一个这样的例子是
console.log(console);
我确定发现里面是什么,但真正的查询现在开始, 当我展开对象时,它有一个名为 __ proto __ 的属性及其子属性,然后再次具有 contructor 的属性,并且循环继续,因为它具有 __ proto __ 再次等等。
结束了吗?
如果是,此多次重复表示什么?
如果否,为什么浏览器在打印这样的无限对象时没有挂起?
谢谢&问候 Shohil Sethia
答案 0 :(得分:0)
如果是,这多次重复表示什么?
Derek已经给你一个解释原型链的链接。
如果否,为什么浏览器不会挂起打印这样的无限对象?
netstat -ano | find ":80"
是一项特殊财产,将以特殊方式处理。相反,我们举一个通用的例子:
__proto__
这将创建一个对象var a = {
nest : function() {
this.b = this;
}
}
a.nest();
,其具有指向主对象a
本身的属性b
。
如果您执行a
,您会看到与console.log(a)
一样的行为。您可以继续展开属性__proto__
N次,它将始终显示具有属性b
和方法b
的对象。
在这种情况下,浏览器不会挂起,因为它只在一级属性上进行迭代。当您尝试扩展属性nest
时,它将再次仅迭代1级子属性。它从不迭代嵌套属性,因此不会遇到任何问题。另一方面,如果您尝试使用b
,它将给出关于循环引用的错误,因为要从对象生成字符串,它必须迭代所有嵌套属性。