您在这里混淆了两个概念,一个是关于本机构造函数的prototype属性和这些本机构造实例的实际原型(用 表示__proto__)。在您的第一个示例中:
function Object.__proto__->Function.prototype
Function.prototype.__proto__->Object.prototype
Object.prototype.constructor->function Object
你必须在这里理解它Object本身Function就是函数,因为构造函数是函数的一种形式。
在#1 中,Object是一个函数,所有函数的实际原型是Function.prototype.
在 #2 中,函数实例继承自身的原型继承自Object.prototype. 这意味着当您从函数实例中查找原型链时,它将首先查看Function.prototype,然后查看Object.prototype。
在 #3 中,该constructor属性适用于对象实例,尽管Object.prototype它本身就是一个对象。它没有原型。
对于您的第二个示例:
Function.prototype.constructor->function Function
function Function.__proto__->Function.prototype
原型中的内容是针对实例的,而不是实际的函数构造函数本身。因为任何函数的构造函数都是Function,这是有道理的。
还记得构造函数仍然是函数吗?因此Function 构造函数的原型将是Function.prototype. Function.prototype本身是一个对象,所以它会有一个__proto__of Object.prototype。
当您查看实际的函数实例时,以下是通过原型链查找属性的方式:
own properties (on the function itself, functions are special objects)
|
|
↓
Function.prototype (the __proto__ of the function itself)
|
|
↓
Object.prototype (the __proto__ of Function.prototype)
|
|
↓
END (Object.prototype's __proto__ is null)