尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
箭头函数为什么不能 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 要的偏偏就是这两样。想通了这题就透了。
RELATED

相关推荐

百cli大战|cc源码:从 source map 还原 npm 包里的 Agent 调用链,把 endpoint 改到 TaoToken

百cli大战|cc源码:从 source map 还原 npm 包里的 Agent 调用链,把 endpoint 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/8 12:52:28
开源 Remote MCP Server 一站式托管来啦:把 Cline MCP 的 endpoint 改到 TaoToken

开源 Remote MCP Server 一站式托管来啦:把 Cline MCP 的 endpoint 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/8 12:52:28
Codex完成的第一个任务分享(牛)文件夹内容修复:TaoToken 统一 Key 接入实录

Codex完成的第一个任务分享(牛)文件夹内容修复:TaoToken 统一 Key 接入实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/8 12:52:28
MORE NEWS

更多资讯

📰

Paramiko实战:从SSH自动化到RPM打包全攻略

做运维自动化这几年,但凡接到“写个脚本批量连服务器执行命令”这类需求,我第一反应基本就是 Python 加 Paramiko。这个库在 Python 生态里的地位很稳:它把 SSH 协议封装成了干净的 Python API,几行代码就能完成远程登录、跑命令、…

📰

T3 Stack全栈开发实战:Next.js + TypeScript + tRPC + Prisma 类型安全一体化

1. 从零搭建t3code:一个基于T3 Stack的全栈项目实践记录我平时喜欢在 GitHub 上刷各类全栈项目,看到 t3code 这个名字第一反应就是 T3 Stack——TypeScript、Tailwind CSS、tRPC 三件套加上 Next.js 的那套组合拳。这套技术栈在圈子里讨论度一直很高&…

📰

OpenMontage:用JSON与FFmpeg打造可编程的视频拼贴工作台

先交代背景:我是做内容混剪和视频拼接的,日常打交道最多的就是素材、时间轴和导出设置。这段时间我一直在调试一个开源拼贴工作台 OpenMontage,感触很深。它的定位并不是又一个“剪映”或“Premiere平替”,而是把“拼贴”这件事拆…

📰

Agent-Reach 实战:CLI 驱动的轻量级 AI Agent 框架搭建与避坑指南

1. 从零认识 Agent-Reach:一个 CLI 驱动的 AI Agent 骨架第一次看到 Agent-Reach 这个名字,我下意识把它和市面上那些"大而全"的 Agent 框架做了对比。说实话,现在 GitHub 上叫得出名字的 Agent 项目没有一百也有八十,L…

📰

体育Logo设计方法论:从足球联赛焕新看品牌策略

体育 Logo 设计这行最近热度很高,尤其足球联赛扎堆焕新标志。我刚入行那会儿,很多人觉得给球队做标志无非是把盾牌、狮子、足球这些元素重新排一下,实际操作下来才知道,这活儿比给普通企业做 VI 复杂得多。联赛标志背后牵扯着几十…

📰

Ansys SIwave实战:PCB信号与电源完整性仿真入门到DC压降分析

做高速数字电路设计,最怕什么?不是原理图画错,也不是芯片买假,而是板子投出去回来之后,信号乱跳、电源纹波压不住、时序总差那么一两个ns。把这些现象归结为“PCB灵异事件”的工程师,多半还没把板级信号完整…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬