箭头函数不能作为构造函数使用,因其缺少prototype属性、[[construct]]内部方法、arguments和new.target,无法支持原型继承和实例化;应改用普通函数或class实现构造逻辑。

箭头函数不能与构造函数兼容,根本原因在于它不具备构造函数所需的底层机制。这不是语法限制,而是设计层面的刻意取舍。
箭头函数没有 prototype 属性
构造函数依赖 prototype 属性来建立原型链,让实例能继承方法和共享属性。普通函数在定义时自动拥有 prototype(值为一个空对象),而箭头函数的 prototype 是 undefined:
-
function Person() {}→Person.prototype存在且可扩展 -
const PersonArrow = () => {}→PersonArrow.prototype为undefined
没有 prototype,new 就无法将新对象的 __proto__ 指向它,自然无法实现原型继承。
箭头函数不可被 new 调用
new 操作符内部会执行四步:创建空对象、绑定原型、执行函数并绑定 this、返回实例。箭头函数缺少两个关键能力:
- 没有 [[Construct]] 内部方法(ECMAScript 规范中构造器必需的抽象操作)
- 无法重定向
this—— 它的this在定义时就已固化,不随调用方式改变
因此 new (() => {}) 会直接抛出 TypeError: xxx is not a constructor。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
箭头函数没有 arguments 和 new.target
构造函数常需访问 arguments 处理动态参数,或通过 new.target 判断是否被 new 调用。箭头函数既不提供自己的 arguments,也不支持 new.target:
- 调用箭头函数时访问
arguments会报ReferenceError -
new.target在箭头函数内始终为undefined,无法做构造检测
这些缺失进一步切断了它作为构造器的可行性。
替代方案:用普通函数或 class 实现构造逻辑
若需要创建实例,应明确使用普通函数或 class:
- 普通函数:首字母大写 +
new调用,如function User(name) { this.name = name; } - class 语法:更现代、语义清晰,如
class User { constructor(name) { this.name = name; } } - 箭头函数适合场景:回调、映射、简化短逻辑,比如
arr.map(x => x * 2)或btn.addEventListener('click', () => doSomething())
混淆用途会导致运行时错误或隐性 bug,明确分工才能写出健壮代码。










