箭头函数根本无法被 new 调用,因其缺失 [[Construct]] 内部方法、不支持 new.target 且 prototype 初始化为 undefined;尝试 new 调用会立即抛出 TypeError,故无需手动防护,应改用普通函数或 class 创建实例。

箭头函数在 JavaScript 中**根本无法被 new 调用**,所以“防止”它被当作构造函数使用,本质上不是靠开发者主动防御,而是语言本身强制禁止——你根本做不到,一试就报错。
为什么不需要手动防止?
因为箭头函数从设计上就缺失构造函数必需的底层能力:
- 没有
[[Construct]]内部方法,而new操作符必须依赖它来初始化实例 -
prototype属性为undefined,无法支持原型链和实例继承 - 不支持
new.target,也无法在运行时识别或拦截 new 调用
实际调用会立刻失败
只要写这一行,JS 引擎就会在执行时抛出明确错误,不会进入函数体:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const p = new Person('Alice'); // TypeError: Person is not a constructor
真正需要注意的场景
问题往往不出在“误用箭头函数”,而出在“误以为它可以替代构造逻辑”。常见误区包括:
立即学习“Java免费学习笔记(深入)”;
- 把箭头函数赋值给类中的方法并试图用
new调用它(如new this.fn()) - 动态生成箭头函数后尝试
new ((...) => {...})()—— 同样直接报错 - 在 TypeScript 或构建工具中未开启严格检查,导致开发期没暴露,但运行时仍崩
正确做法:用对语法
需要创建实例对象,必须选择支持构造行为的语法:
- 普通函数声明:
function Person(name) { this.name = name; } - 函数表达式:
const Person = function(name) { this.name = name; }; - ES6 class:
class Person { constructor(name) { this.name = name; } }

















