javascript - 为什么我不能在 JavaScript/ES6 中使用带有箭头函数的 `new`?

标签 javascript function ecmascript-6 arrow-functions

据我所知,箭头函数类似于普通函数。我这样使用没有任何问题:

let X = () => {};
let Y = function() {};
X();
Y();

但是,当我将它们与 new 一起使用时,出现了错误:

let X = () => {};
let Y = function() {};
x = new X();
y = new Y();

未捕获的类型错误:X 不是构造函数

这是为什么?

最佳答案

问。我做错了什么?

A.您将 new 与箭头函数一起使用,这是不允许的。

问。我可以将箭头函数转换为构造函数吗?

A. 仅将其包装在普通函数中,这很愚蠢。 您不能将箭头函数本身变成构造函数。

问。您能解释一下规范如何禁止使用箭头函数的 new 吗?

A. 要成为构造函数,函数对象必须具有 一个[[Construct]] 内部方法。

使用 function 创建的函数 关键字是构造函数,一些内置函数也是如此 例如 日期。这些是您可以使用 new 的函数。

其他函数对象没有[[Construct]] 内部方法。这些包括箭头功能。所以你不能 将 new 与这些一起使用。这是有道理的,因为你 can't set the this value of an arrow function .

一些内置函数也不是构造函数。例如。你 不能做 new parseInt()

Q. 你能解释一下不允许 new 背后的理由吗 规范中有箭头函数?

A. 使用常识,或搜索 es-discuss archives .

关于javascript - 为什么我不能在 JavaScript/ES6 中使用带有箭头函数的 `new`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37587834/

相关文章:

Javascript - 要么 Push(StringArray.split (",") 不起作用,要么循环不工作

c++ - 如何结束文件输出它的数据?

javascript - Symbol.toPrimitive 与 Object.prototype.valueOf

c - 函数未正确返回 char : error during compile

javascript - 编写多个 React 组件的更有效方法?

javascript - ECMAScript 2017 中的 CallExpression 与 NewExpression

javascript - 如何使用 arr.forEach 调用异步 JavaScript redis 调用?

javascript - 从文本中提取 URL 的正则表达式(带/不带协议(protocol)和 www 或子域)

javascript - 回调函数中的谷歌地图地理编码类型错误

php - 在类中使用超过 1 个内联函数