function.__proto__ 指向 function.prototype,因 function 是自身实例,其隐式原型必指向自身显式原型;function.prototype 为函数共享方法源头,其 proto 指向 object.prototype,最终至 null,形成非循环的完整原型链。

Function.__proto__ 指向 Function.prototype,这不是巧合,而是 JavaScript 原型系统自洽设计的核心体现:函数是对象,而函数对象的构造器就是 Function 本身。
Function 是它自己的实例
在 JavaScript 中,Function 是一个内置构造函数,所有函数(包括 Object、Array、自定义函数甚至 Function 自身)都是通过 Function 构造出来的。所以:
-
Function.__proto__ === Function.prototype—— 函数对象的隐式原型,指向它自己的显式原型 -
typeof Function === 'function',说明 Function 本身是个函数对象 - 而函数对象必须有
__proto__,它的值只能是其构造器的prototype;Function 的构造器就是 Function,所以自然指向Function.prototype
Function.prototype 是函数的统一行为源头
Function.prototype 是一个普通函数(typeof Function.prototype === 'function'),但它没有 prototype 属性(即 Function.prototype.prototype === undefined)。它提供了所有函数共有的方法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
call()、apply()、bind() - 这些方法不是每个函数单独拥有的,而是从
Function.prototype共享继承来的 - 你写的
function foo(){},它的__proto__也指向Function.prototype
终极链路:Function.prototype → Object.prototype → null
虽然 Function.__proto__ 指向 Function.prototype,但这条链还没结束:
-
Function.prototype.__proto__ === Object.prototype—— 因为Function.prototype是个普通对象(函数也是对象),所以它的隐式原型指向对象的终极原型 -
Object.prototype.__proto__ === null—— 原型链终点,不再向上查找 - 因此完整路径是:
Function → Function.prototype → Object.prototype → null
为什么不是循环?关键在“谁造了谁”
表面看 Function.__proto__ === Function.prototype 像循环,实则不然:
-
Function是一个函数对象,由引擎在启动时用底层机制创建(可理解为“硬编码初始化”) -
Function.prototype是引擎为Function预设的原型对象,专用于承载函数通用能力 - 二者在内存中是两个独立对象,只是引用关系被刻意设为相等,以满足“函数是 Function 的实例”这一语义
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










