箭头函数没有 prototype 是语言设计的明确选择,因其不可构造、不参与原型链, lacks [[construct]]、不可写 prototype 属性、无法绑定 this 到实例,故不能用于继承或实例化。

箭头函数没有自己的 prototype,不是遗漏或 bug,而是语言设计的明确选择——它从诞生起就被定义为“不可构造、不参与原型链”的轻量函数形式。
它根本就不是构造函数该有的样子
JavaScript 中能用 new 调用的函数,必须满足几个底层条件:有 [[Construct]] 内部方法、有可写的 prototype 属性、能绑定 this 到新实例。箭头函数三项全缺:
- 执行
fn.prototype得到undefined,不是空对象,是压根不存在这个属性 - 尝试
new fn()会立即报错:TypeError: fn is not a constructor - 即使手动赋值
fn.prototype = {},引擎也不会认可——instanceof不认,new仍失败
没有 prototype 就搭不起原型链
原型链继承依赖“构造函数 → prototype → 实例.__proto__”这条通路。箭头函数卡在第一步:
- 普通函数
function Foo() {}自带Foo.prototype,实例的__proto__指向它 - 箭头函数
const Bar = () => {}没有prototype,连挂载共享方法的地方都没有 - 没法写
Bar.prototype.method = ...,也没法用Object.create(Bar.prototype)做继承
它的 this 和角色决定了不需要 prototype
箭头函数的 this 是词法绑定的,定义时就固定了,不随调用方式改变。这意味着:
- 它不靠
this指向实例来初始化状态,自然也不需要通过prototype分发方法 - 它被定位为“表达式级回调”,比如
arr.map(x => x * 2)或btn.addEventListener('click', () => this.handleClick()) - 需要类型定义、实例化、多态行为时,该交给
function或class,而不是强行用箭头函数模拟
这不是缺陷,是职责划分
JavaScript 故意让箭头函数和普通函数承担不同任务:
- 普通函数 / class:负责建模、实例化、继承、方法复用
- 箭头函数:负责简洁表达逻辑、安全捕获上下文
this、避免绑定丢失 - 混用会导致语义混乱——比如
() => ({})看似“构造对象”,实际返回的是字面量,不是实例,也没有原型链











