如果这么输出,结果就是
如果 console.log(arr)
原型链就变长了
Array => Object => Array => Object => null
这是为什么
如果这么输出,结果就是
如果 console.log(arr)
原型链就变长了
Array => Object => Array => Object => null
这是为什么
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
__proto__
不是。__proto__
是定义在 Object.prototype 上的一个 getter / setter 。console.log(arr.__proto__.__proto__)
,看不到 [[Prototype]] 。但是__proto__
作为一个 getter ,它还是在的。__proto__
是定义在 Object.prototype 上的,所以一定在顺着原型对象([[Prototype]])走到 Object.prototype 的时候才能看到。作为一个 getter ,它的值最开始显示为(...)
(至少在我的 Chrome 上是这样的),需要点击一下才会计算。计算的时候,是对原始对象进行计算的。__proto__
,它还是arr
的__proto__
,它的计算结果是arr.__proto__
。__proto__
看下去,就是看到 Array, Object, Array__proto__
的结果,也就是arr.__proto__
=== Array.prototype ,再展开的时候就是 Array.prototype 的属性跟 internal slot 了。所以你可以通过 arr / [[Prototype]] / [[Prototype]] /__proto__
/ [[Prototype]] 看到 Object 。这个 Object 下面看不到 [[Protoype]] (null),但是有__proto__
,计算结果是arr.__proto__.__proto
===Array.prototype.__proto__
===Object.prototype
。Object.prototype
的 [[Prototype]] 是 null ,不展示。但是有__proto__
,Object.prototype.__proto__ === null
。__proto__
。