箭头函数没有 prototype 属性,因此不能被 new 调用或参与原型链继承;这是 ES6 为消除函数二义性而做的刻意设计,使其仅用于逻辑封装与回调。

因为箭头函数不是构造函数,语言设计上就明确排除了实例化能力——它没有 prototype 属性,根本原因在于其语义定位与普通函数完全不同。
箭头函数的本质是“无构造意图”的函数表达式
JavaScript 中的 prototype 属性只存在于**有意作为构造器使用的函数**上,它是引擎为支持 new 操作而预留的共享原型对象入口。而箭头函数从语法诞生起就被定义为:不绑定 this、不可 new、不拥有 arguments 或 super。这种“轻量回调专用”定位,使它天然不需要参与原型链构建。
-
普通函数:声明即自带
prototype(哪怕没被new过),因为随时可能被用作构造器 -
箭头函数:语法上禁止
new调用,(() => {}).prototype直接返回undefined,不是遗漏,而是规范强制
没有 prototype 就无法形成原型链委托
prototype 是构造函数与其所创建实例之间的桥梁。当执行 new Fn() 时,引擎会把新对象的 __proto__ 指向 Fn.prototype。而箭头函数连这个桥梁都不被允许搭建:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 调用
new (() => {})会立即抛出TypeError: xxx is not a constructor - 没有
prototype,意味着没有可被继承的公有方法存放位置,也无法通过instanceof判断关系 - 它不参与任何基于原型的继承或方法共享机制
这是对函数二义性的主动规避
传统函数存在“既能调用又能构造”的二义性(比如 function User() {} 可以 User() 也可以 new User()),带来心智负担和安全隐患。ES6 引入箭头函数,本质是提供一种单语义函数形式:只用于逻辑封装与回调,彻底放弃构造职责。去掉 prototype 是这一设计最直接的体现——没有原型,就没有构造可能;没有构造可能,也就消除了调用歧义。
所以不是“忘了加”,而是“刻意不给”。它的简洁语法背后,是一次对函数角色的重新划分。

















