我在 JS 中观察到一些奇怪的事情。如果我执行以下操作:
console.log(Object.getPrototypeOf({});
以上指向
Object.prototype
。检查:
console.log(Object.getPrototypeOf({}) === Object.prototype) //true
我们知道Prototype链的终点是
null
,这意味着Object.prototype.__proto__
应该是null
,它是:
console.log(Object.getPrototypeOf(Object.getPrototypeOf({}))); //null
如果上述情况成立,那么为什么浏览器控制台会显示原型链末端存在循环链呢?看看下面的图片:
上图中,为什么红框中的
__proto__
又指向Object.prototype
?为什么这不是null
?还有为什么__proto__
的__proto__
在红框里null
呢?
我在 Chrome 和 Edge 上尝试过这个。结果相同。
谢谢你。
没有循环链。前 2 个
Object
是相同的。所以第一个显示为{}
的原型。 __proto__
属性是此原型的来源。
console.log(Object.getPrototypeOf({}) === {}.__proto__);