javascript中函数的__proto__指向function.prototype而非function本身,因为函数是function的实例;function.prototype.__proto__指向object.prototype,最终至null。

JavaScript 中,函数的原型链最终指向 Function.prototype,而不是直接指向 Function 构造函数本身。这是理解原型链的关键点:所有函数(包括内置构造函数如 Array、Date,以及用户自定义函数)都是 Function 的实例,因此它们的 __proto__ 指向 Function.prototype。
函数对象的 __proto__ 指向 Function.prototype
当你声明一个函数时,它本质上是一个函数对象,而所有函数对象都继承自 Function.prototype:
-
function foo() {}是一个函数对象,foo.__proto__ === Function.prototype为 true -
const bar = new Function('return 42');同样满足bar.__proto__ === Function.prototype - 甚至
Function自身也是函数,所以Function.__proto__ === Function.prototype—— 这是原型链中的一个关键闭环
Function.prototype 的 __proto__ 指向 Object.prototype
Function.prototype 本身是一个普通对象(不是函数),所以它的原型是 Object.prototype:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
Function.prototype.__proto__ === Object.prototype为 true - 这也意味着函数可以调用
.toString()、.hasOwnProperty()等来自Object.prototype的方法
为什么不是指向 Function?
Function 是一个构造函数,它本身是一个函数对象;而原型链描述的是“实例 → 构造函数的 prototype”关系:
-
foo是Function的实例,所以foo.__proto__指向Function.prototype -
Function本身也是Function的实例(即自指),所以Function.__proto__ === Function.prototype - 把
__proto__指向Function(构造函数)就混淆了实例与构造器的关系,违反原型链的设计逻辑
完整原型链示例(以普通函数为例)
以 function fn() {} 为例,其原型链为:
fn.__proto__ === Function.prototypeFunction.prototype.__proto__ === Object.prototype-
Object.prototype.__proto__ === null(终点)
这条链清晰体现了“函数 → 函数的原型 → 对象的原型 → null”的继承路径。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










