Object 和 Function 互为实例是原型链自然演化的结果:Object.__proto__ === Function.prototype,Function.__proto__ === Function.prototype,Object.prototype.__proto__ === null,三者构成闭环。
object 和 function 互为实例,不是循环悖论,而是原型链自然演化的结果。关键不在“谁先谁后”,而在它们的 __proto__ 指向 和 constructor 关系 如何层层嵌套、最终收束于 null。
JavaScript 中,每个函数(含 Object、Array、function foo(){})都是 Function 的实例:
typeof Object === 'function' → Object 是函数对象Object.__proto__ === Function.prototype → 它由 Function 构造Function.__proto__ === Function.prototype → Function 也构造自己(唯一自指函数)Object.prototype 是绝大多数对象原型链的顶端,它的 __proto__ 为 null:
{}.__proto__ === Object.prototypenew Date().__proto__ === Date.prototype,而 Date.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null → 原型链在此终止因为 instanceof 判断逻辑是:**沿着左操作数的 __proto__ 链,查找是否等于右操作数的 prototype**:
Object instanceof Function → 查 Object.__proto__(即 Function.prototype)是否等于 Function.prototype → ✅ 相等Function instanceof Object → 查 Function.__proto__(即 Function.prototype),再查 Function.prototype.__proto__(即 Object.prototype),它等于 Object.prototype → ✅ 找到真正支撑互为实例的,是以下三个关键连接(可手绘三节点箭头图):
__proto__ 指向 Object.prototype
constructor 指向 Object(通过原型链继承)prototype 是一个对象,该对象的 constructor 又指向 Object
这三者构成闭环:Function 构造 Object → Object 的原型是 Object.prototype → Object.prototype 的源头是 Function.prototype → Function.prototype 本身又是 Function 的实例。