这个跟展示的方法有关。因为 "__proto__" 不是一个普通的属性,而是一个定义在 "Object.prototype" 上的 "accessor
property/属性访问器" (https://link.segmentfault.com/?enc=PWilyHFp0%2BD5kXEf8HCPnw%3D%3D.lEjqIDkJAvp%2FBNhfNk%2BWe7y9j4B1irYsPU2JyLmhZd3sO3zeFUVhbUaXHl%2F%2BcCvYaBUbQnyVhatjUGAuEUH6iCqsQnTeIoJx%2Fy7IgwjEdVgrPo2%2BwnA3vjjRLAqat95M)
。(你可以在 "__proto__" 下面看到 "get __proto__" , "set __proto__")
所以 "__proto__" 并没有出现在每一层 prototype
里,而只出现在了它所定义的位置("Object.prototype.__proto__"),而它的值展示的是它在原始对象(也就是 Fn)上的计算结果,也就是
Fn.prototype 。
而 "[[Prototype]]" 是真正的原型对象。但是 Object.prototype.[[Prototype]] 是 null
,于是在结果中并没有展示。
***
"[[Prototype]]" 也不是普通的属性,而是一个 "internel
slot" (https://link.segmentfault.com/?enc=wCRtgsXEesGOkEfcaX4Vcg%3D%3D.MWUtBSda4farhVHcB18Dg2CRWNowGUTRNLYYvymwoQJ%2F6rH%2FdLXYyiOKAvnidAX4ow0CE%2Bha8MTyP0DEMXusxvNRJDKIJO8E9F6CLn67rW9Up6oV8bG2QrsUUYXRVsWbp0bpTGRHgmNHcBd5p2HOTx2CbB%2BnJ7g7F93H8MCpb3y%2B%2B38NRf9ewZlx6aID3p5j4QwFQa9zbX7%2FNKe89dHlMbstsY4D2C2UyVdMK7QvZtxy3Lv76pDOh7oQtAOaLhI8lgflTptTQW8uQceG%2BZ2Ucw%3D%3D)
。它在调试器里的展示策略可能跟普通的属性也不一样。