浏览器控制台中的对象属性
Object Properties in Browser's Console
每当我将任何 javascript 对象 登录到 浏览器 时,我都热衷于通过扩展其中的内容来探索它控制台 window,
一个这样的例子是
console.log(console);
我确实找到了里面的东西,但真正的查询现在才开始,
当我展开对象时,它有一个名为 __proto__ 的 属性 及其内部的子属性,然后它又具有 属性 的 contructor 循环继续,因为它有 __proto__ 等等。
结束了吗?
如果是,这个多次重复表示什么?
如果否,为什么浏览器不会在打印这样的无限对象时挂起?
- 高度赞赏任何线索
感谢和问候
肖希尔塞西亚
If Yes, what does this multiple repetition denotes ?
Derek 已经给你一个link解释原型链。
If No, Why doesn't browser hangs on printing such infinite object ?
__proto__
是一个特殊的属性,将以特殊方式处理。相反,让我们举一个通用的例子:
var a = {
nest : function() {
this.b = this;
}
}
a.nest();
这将创建一个对象 a
,它有一个指向主对象 a
本身的 属性 b
。
如果您这样做 console.log(a)
,您将看到与 __proto__
类似的行为。您可以继续扩展 属性 b
N 次,它总是会显示一个具有 属性 b
和方法 nest
的对象。
在这种情况下,浏览器不会挂起,因为它只迭代一层属性。当您尝试展开 属性 b
时,它会再次迭代仅一级子属性。它从不迭代嵌套属性,因此不会遇到任何问题。另一方面,如果您尝试使用 JSON.stringify(a)
,它将给出有关循环引用的错误,因为要从对象生成字符串,它必须迭代所有嵌套属性。
每当我将任何 javascript 对象 登录到 浏览器 时,我都热衷于通过扩展其中的内容来探索它控制台 window, 一个这样的例子是
console.log(console);
我确实找到了里面的东西,但真正的查询现在才开始, 当我展开对象时,它有一个名为 __proto__ 的 属性 及其内部的子属性,然后它又具有 属性 的 contructor 循环继续,因为它有 __proto__ 等等。
结束了吗?
如果是,这个多次重复表示什么?
如果否,为什么浏览器不会在打印这样的无限对象时挂起?
- 高度赞赏任何线索
感谢和问候 肖希尔塞西亚
If Yes, what does this multiple repetition denotes ?
Derek 已经给你一个link解释原型链。
If No, Why doesn't browser hangs on printing such infinite object ?
__proto__
是一个特殊的属性,将以特殊方式处理。相反,让我们举一个通用的例子:
var a = {
nest : function() {
this.b = this;
}
}
a.nest();
这将创建一个对象 a
,它有一个指向主对象 a
本身的 属性 b
。
如果您这样做 console.log(a)
,您将看到与 __proto__
类似的行为。您可以继续扩展 属性 b
N 次,它总是会显示一个具有 属性 b
和方法 nest
的对象。
在这种情况下,浏览器不会挂起,因为它只迭代一层属性。当您尝试展开 属性 b
时,它会再次迭代仅一级子属性。它从不迭代嵌套属性,因此不会遇到任何问题。另一方面,如果您尝试使用 JSON.stringify(a)
,它将给出有关循环引用的错误,因为要从对象生成字符串,它必须迭代所有嵌套属性。