箭头函数不能用作构造函数,因其没有[[construct]]内部方法、无prototype属性、不绑定this/arguments/super/new.target,且设计上明确禁止构造调用以保持语义清晰。

箭头函数不能用作构造函数,根本原因在于它**没有自己的 [[Construct]] 内部方法**,也不具备构造调用所需的运行时语义支持。
没有 [[Construct]] 内部方法
ECMAScript 规范规定,只有具有 [[Construct]] 内部方法的函数对象才能通过 new 调用。普通函数(FunctionDeclaration / FunctionExpression)在创建时会自动获得该方法;而箭头函数在规范中被明确定义为“不具有 [[Construct]]”,其内部方法只包含 [[Call]]。当 JS 引擎遇到 new arrowFn() 时,会直接抛出 TypeError: arrowFn is not a constructor。
没有原型对象(prototype)属性
构造函数必须拥有可写的 prototype 属性,用于为新实例提供继承链。箭头函数对象**没有 prototype 属性**(其 Object.getOwnPropertyDescriptor(arrowFn, 'prototype') 返回 undefined),且不可通过赋值添加(严格模式下会静默失败,非严格模式下也无效)。这导致无法设置实例的 __proto__ 指向,破坏原型继承机制。
不绑定 this,且无 arguments、super、new.target
箭头函数的 this 是词法绑定的,无法在构造调用中动态绑定到新创建的实例。同时,它不绑定 arguments 对象、不支持 super(无 [[HomeObject]])、也没有 new.target —— 而这些是构造器执行时识别自身是否被 new 调用、初始化实例、处理继承等的关键元信息。
设计意图:明确语义分离
箭头函数的核心定位是“简洁的非构造式函数表达式”,用于替代匿名函数(如回调)。ES6 故意剥离其构造能力,避免语义混淆。若需构造行为,应使用 class 或传统 function —— 这种限制不是实现缺陷,而是规范层面的**有意约束**,确保语言行为可预测。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











