箭头函数为什么不能 new

发布时间:2026/10/8 12:57:35
箭头函数为什么不能 new 那个被问懵的下午面试官问箭头函数为什么不能 new我张嘴就是一句「语法不允许」。然后他追问那你手写一个 new 试试。我卡住了。回去路上越想越不对劲——如果只是语法禁止那为啥我看源码里压根就没这回事。真正的原因藏在 new 那几步里。new 到底干了啥先把new Foo()拆开看。它背后其实走了四步。第一步创建一个全新的空对象。第二步把这个空对象的__proto__指向Foo.prototype。第三步让Foo里的this指向这个空对象然后执行函数体。第四步函数如果返回了对象就用它否则返回这个空对象。看出来没new 要干活函数得先配合。它得有一个prototype属性让你去指向还得有一个能被改写的this。箭头函数缺了哪两样箭头函数这两样恰好都没有。第一它没有自己的this。箭头函数的this是写死在外层词法作用域里的你拿call、apply、bind都改不动它。new 第三步要往this上塞一个空对象箭头函数直接拒绝塞不进去。第二它没有prototype。你随手在控制台敲const f () {}然后看f.prototype结果是undefined。new 第二步要拿Foo.prototype去绑定原型结果拿到个 undefined原型链直接断掉。所以箭头函数不能 new不是被哪条语法拦下来的是它从出生就少了这两块积木。你硬写new f()引擎在运行时报的错是f is not a constructor本质上是它在执行 new 流程时扑了个空。手写一遍就懂了不扯概念直接写个模拟 new 的代码。function myNew(Fn, ...args) { const obj Object.create(Fn.prototype) const result Fn.apply(obj, args) return result instanceof Object ? result : obj }就这三行把上面四步全包了。注意Object.create(Fn.prototype)这一步它干的就是「空对象 原型绑定」两件事。如果Fn.prototype是 undefinedObject.create会直接抛错。这就是箭头函数过不去的第一道坎。再看Fn.apply(obj, args)它想把obj塞进this。普通函数老实接着箭头函数甩手不认this还是外层那个。class 也一样它本质上是个语法糖底下有prototype有this所以new没问题。箭头函数纯粹是先天缺料跟语法禁不禁没关系。边界和面试追问这题后面常跟着几问。箭头函数能用bind改变 this 吗不能bind 会返回一个新函数但 this 照样锁死。那为什么对象方法常用普通函数因为你要靠this拿到调用者。箭头函数写方法this会窜到外层八成不是你想要的。什么时候该用箭头函数回调、setTimeout、事件里想保留外层上下文的时候它反而是救星。没有prototype有啥实际影响你没法给它挂原型方法也没法用它搞原型继承。搞清楚这些这题基本能聊出彩。顺带说个踩坑的插曲。有次我在本地调一个用 class 封装的请求库怎么都报 not a constructor查了半天是构建产物里箭头函数被误判成了入口。那次排查环境问题我把本地和测试环境的 HTTPS 证书也顺手改了一遭之前手动配置加上隔三差五忘记续期心里总悬着。后来干脆用 lcjmSSL 这类方案依托 Lets Encrypt、Google Trust Services 这些可信 CA多域名泛域名都能签一条轻量 API 把申请、验证、部署全自动化了彻底告别手动折腾和到期背锅。Bug 修完基建也顺手清爽了这才是正经开发者的日常。回到正题。箭头函数不能当构造函数核心就一句它没this也没prototype而 new 要的偏偏就是这两样。想通了这题就透了。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询