Function.prototype是所有函数的共同原型和唯一共享显式原型,它是一个可调用函数对象,提供call、apply、bind等方法,并通过constructor指向Function形成自指闭环,处于原型链中Object.prototype之上的关键枢纽位置。
函数是对象,这个事实直接决定了 function.prototype 在整个原型体系中不可替代的地位——它既是所有函数的“共同原型”,又是唯一能被所有函数(包括 function 自身)共享的显式原型。
Function.prototype 是所有函数的统一隐式原型来源
每个函数(比如 function foo(){}、class Bar{}、箭头函数)在创建时,其 __proto__ 都指向 Function.prototype。这是因为:
- 函数本质上是
Function的实例,等价于new Function(...)的结果 - 按原型链规则,实例的
__proto__必须等于其构造函数的prototype - 所以
foo.__proto__ === Function.prototype,Bar.__proto__ === Function.prototype
Function.prototype 自身不是空对象,而是有实际方法的“函数基类”
不同于普通构造函数的 prototype 默认指向一个空对象,Function.prototype 是一个**真实存在的、可调用的函数对象**(表现为 ƒ () { [native code] }),它自带 call、apply、bind 等关键方法:
- 这些方法对所有函数都可用,正是靠
Function.prototype提供的共享能力 - 你写
foo.call(this, ...),本质是沿着foo.__proto__ → Function.prototype找到call - 没有它,每个函数都要单独实现这些通用行为,无法统一调度
Function.prototype 的 constructor 指向 Function,形成自指闭环
Function.prototype.constructor === Function,这是唯一一个显式原型的 constructor 指向自身的例子:
- 说明
Function是“自己造自己”的特例:它的实例(即所有函数)的原型是它自己定义的prototype - 而
Function.prototype本身又是一个函数对象,所以它也有__proto__,且Function.prototype.__proto__ === Object.prototype - 这个设计让函数既能作为构造器(有
prototype),又能作为普通对象(有__proto__)参与原型链
它处于原型链的关键枢纽位置
从任意函数出发,原型链走向是:foo.__proto__ → Function.prototype → Function.prototype.__proto__ → Object.prototype → null
- 它是
Object.prototype之上的最后一层“函数专属层” - 所有函数共有的行为(如
toString、valueOf)其实来自Object.prototype,但函数特有的行为(call/bind)必须由它承载 - 修改
Function.prototype会影响所有函数(不推荐,但技术上可行)

















