箭头函数没有prototype属性,因其被es6明确定义为非可构造函数,引擎不为其初始化prototype,故不可用new调用、无法作为构造器参与原型继承。

箭头函数没有自己的原型对象,根本原因在于它不是构造函数,也不参与基于 prototype 的对象继承体系。这不是语法限制,而是语言设计层面的底层机制决定的。
箭头函数不具有 prototype 属性
每个普通函数在创建时,JavaScript 引擎会自动为其添加一个 prototype 属性,指向一个默认对象(含 constructor 指针)。这个属性是构造函数能被 new 调用、实例能通过 __proto__ 链接它的前提。
而箭头函数在 ES6 规范中被明确定义为“非可构造函数”(not constructable),引擎不会为其初始化 prototype 属性:
- console.log((() => {}).prototype) → undefined
- console.log(function() {}.prototype) → { constructor: f }
没有 prototype,自然无法作为构造函数使用,也无法让实例通过 __proto__ 关联到它——因为没有可供链接的目标。
它由 Function 构造函数生成,但不继承其构造能力
虽然箭头函数本身是 Function 的实例((() => {}).constructor === Function 为 true),但它被设计为“纯净的执行体”,剥离了传统函数的关键运行时特征:
- 不绑定 this(词法继承)
- 不提供 arguments 对象(改用 rest 参数)
- 不暴露 prototype(无法扩展原型方法)
- 不可被 new 调用(调用即抛 TypeError)
这些特性是一体设计的:移除 prototype 是为了消除“被用作构造器”的语义可能性,确保它只用于逻辑封装与回调执行。
原型链查找不经过箭头函数
原型链的起点是对象的 __proto__,终点是 Object.prototype。箭头函数本身是一个函数对象,它的 __proto__ 指向 Function.prototype(因为它由 Function 构造),但它永远不会成为其他对象的 __proto__ 目标——因为没有实例会以它为构造器,也就没有对象的 __proto__ 会指向它的 prototype(它压根没有)。
换句话说:普通函数是原型链的“节点提供者”,箭头函数只是原型链上的“路过者”。它有 __proto__(继承自 Function),但不提供 prototype(不供他人继承)。
对比普通函数:prototype 是共享行为的基础设施
普通函数的 prototype 是为支持面向对象模式而设的共享空间。例如:
- function Person(name) { this.name = name; }
- Person.prototype.say = function() {};
- const p = new Person('Alice'); → p.__proto__ === Person.prototype
这套机制依赖 prototype 存在且可写。箭头函数跳过整个流程,它不定义实例结构,也不承载共享方法,因此不需要、也不允许拥有 prototype。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











