不能。箭头函数因缺少[[Construct]]内部方法、无prototype属性、不支持构造上下文,被ES6规范明确禁止作为构造函数使用,这是有意为之的设计选择。

不能。箭头函数在 JavaScript 中**完全不能**作为构造函数使用,这不是语法错误或兼容性问题,而是语言规范从设计层面就禁止的行为。
缺少 [[Construct]] 内部方法
JavaScript 引擎判断一个函数能否被 new 调用,唯一依据是它是否拥有 [[Construct]] 这个内部方法:
- 普通函数(function 声明/表达式)和 class 在创建时自动具备 [[Construct]];
- 箭头函数在 ES6 规范中被明确定义为“仅含 [[Call]],不含 [[Construct]]”;
- 执行 new arrowFn() 时,引擎一检查就发现缺失该方法,立刻抛出 TypeError: xxx is not a constructor,函数体根本不会执行。
没有 prototype 属性
构造函数必须提供可访问、可配置的 prototype,用于建立实例的原型链:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
console.log((() => {}).prototype)输出 undefined; - 即使尝试赋值
arrowFn.prototype = {},在严格模式下静默失败,非严格模式也无效; - 没有 prototype,新对象就无法通过 __proto__ 指向它,继承机制彻底失效。
不支持构造上下文
构造调用依赖一套完整的运行时上下文,而箭头函数全部缺失:
立即学习“Java免费学习笔记(深入)”;
- this 是词法绑定的,静态捕获外层作用域值,无法在 new 时动态指向新实例;
- arguments 对象不可访问(需用 rest 参数替代);
- new.target 始终为 undefined,无法判断是否被构造调用;
- super 不可用,无法参与类继承逻辑。
这是有意为之的设计选择
ES6 引入箭头函数的目标很明确:提供轻量、无状态、专注计算的函数表达式,尤其适合回调、映射、事件处理等场景:
- 避免语义混淆,比如
() => ({})返回的是字面量对象,不是实例; - 防止词法 this 与构造时的动态 this 绑定发生冲突;
- 保持语言行为清晰可预测——需要建模类型,就用 function 或 class;需要简洁回调,就用箭头函数。

















