Function是JavaScript中所有函数对象的构造函数和起点,其prototype指向Function.prototype,后者__proto__指向Object.prototype,最终终止于null,形成原型链闭环。

Function 是 JavaScript 中最特殊的函数对象,它既是构造函数,又是自身实例,还是所有函数的“源头”。理解它的原型链,是打通整个 JS 原型体系的关键。
Function 本身是一个函数对象
你写的 function foo() {}、const bar = () => {},甚至 Object、Array 这些内置构造器,全都是 Function 的实例。也就是说:
foo.__proto__ === Function.prototypeArray.__proto__ === Function.prototypeObject.__proto__ === Function.prototype
这说明:所有函数对象(包括内置和自定义)的隐式原型都指向 Function.prototype。
Function.prototype 是个普通对象,不是函数
Function.prototype 本身没有 [[Call]] 内部方法,不能被调用,所以它不是函数对象,而是一个普通对象。因此:
立即学习“Java免费学习笔记(深入)”;
- 它没有自己的
prototype属性(非函数对象无prototype) - 它有
__proto__,且Function.prototype.__proto__ === Object.prototype - 它上面定义了所有函数共有的方法,比如
call、apply、bind
Function 的 constructor 指向自己
Function 是唯一一个满足 Function.constructor === Function 的对象。它“生来就有”,不需要别的构造器创建它:
-
Function.constructor === Function✔️ -
Function.prototype.constructor === Function✔️ -
Object.constructor === Function✔️(因为 Object 是 Function 的实例)
这也印证了那句核心口诀:所有函数都是 Function 的实例,Function 是一切函数的起点。
从 Function 到 Object 的闭环链路
完整的向上追溯路径如下:
myFunc.__proto__ → Function.prototypeFunction.prototype.__proto__ → Object.prototypeObject.prototype.__proto__ → null
注意:虽然 Object 是函数,但 Object.prototype 是普通对象,它的 __proto__ 终止于 null,构成原型链终点。而 Function 作为函数,其 prototype 是 Function.prototype,这个对象又通过 __proto__ 接入 Object 原型链——这就完成了从 Function 到 Object 的双向闭环。


















