查看原文
其他

箭头函数原来是这样的,99.9% 的人都不知道这点

一句话答案

因为箭头函数没有[[Construct]]这个内部槽。

进一步解释

函数对象是一个支持[[Call]][[Construct]]内部方法的对象。每个支持[[Construct]]的对象必须支持[[Call]],也就是说,每个构造函数必须是一个函数对象。因此,构造函数也可以被称为 构造函数函数构造函数对象

所以,想要对某个对象使用 new,就得确保该对象具有[[Construct]]这个内部方法。而箭头函数没有[[Construct]]

为什么没有[[Construct]]

因为箭头函数设计之初,就是为了设计一种更简短的函数并且不绑定 this。所以箭头函数不为参数 superthisnew.target 定义本地绑定。箭头函数中的 thissuperargumentsnew.target 这些值由外围最近一层非箭头函数决定。

而这样的一个函数设计者认为没有必要委托给能够[[Construct]]的目标函数。所以箭头函数没有 [[Construct]]

同时因为没有构造原型的需求,所以箭头函数不存在 prototype 属性。

相关论据




作者:Jokerrr

https://juejin.cn/post/7050492355056664612


- EOF -

推荐阅读  点击标题可跳转

1、那些你熟悉而又陌生的函数

2、详解 30 道 Vue 面试题(建议收藏)

3、前端 3 年以上面试常考问的 web 安全问题总结


觉得本文对你有帮助?请分享给更多人

关注「大前端技术之路」加星标,提升前端技能

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存