Function.prototype 是所有函数的共同原型,提供 call/apply/bind;其 proto 指向 Object.prototype,使函数兼具可调用性与对象通用方法,构成原型链闭环。

Function.prototype 和 Object 的关联不是靠代码手动建立的,而是 JavaScript 引擎在初始化时就写死的底层设计。关键不在“怎么产生”,而在“为什么必须这样连”——它服务于函数即对象、对象可被构造这两条根本原则。
Function.prototype 是所有函数的共同原型
每个函数(包括 Object、Array、自定义函数甚至 Function 自身)创建时,其内部 __proto__ 都被设为 Function.prototype:
-
Object.__proto__ === Function.prototype→ Object 是函数,由 Function 构造 -
Function.__proto__ === Function.prototype→ Function 也是函数,自己造自己 -
function foo(){}.__proto__ === Function.prototype→ 所有函数共享同一行为源头
这意味着 call、apply、bind 等方法天然存在于所有函数上,无需重复定义。
Object.prototype 是所有对象的终极原型终点
虽然函数是对象,但它们的“对象性”最终要落到普通对象的语义上。而这个落点,就是 Object.prototype:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
Function.prototype.__proto__ === Object.prototype→ Function.prototype 本身是个普通对象(不可调用),所以它的原型是 Object.prototype -
Object.prototype.__proto__ === null→ 原型链在此终止,不再向上找 -
{}, [], new Date(), Function.prototype全部能用 toString()、hasOwnProperty(),因为它们都通向 Object.prototype
二者通过 Function.prototype.__proto__ 连成闭环
这条连接线是整个原型系统承上启下的枢纽:
- 它让函数既能保持“可调用”的特殊身份(靠 Function.prototype 提供 call/apply)
- 又不脱离“对象”的统一模型(靠 Object.prototype 提供通用方法)
- 没有它,函数就无法使用 toString();有了它,
(function(){}).toString()才能正常工作
Object 作为构造函数,也依赖这个结构
当你写 new Object(),实际发生的是:
- 引擎调用 Object 构造函数(它本身是 Function 的实例)
- 新对象的 __proto__ 被设为 Object.prototype
- 而 Object.prototype 又连回 Object.prototype.__proto__ === null,形成干净终点
换句话说:Object 是“造对象的函数”,但它自己得先是一个函数——所以它归 Function 管;它造出的对象得有基本能力——所以它们归 Object.prototype 管。

















