据我所知,箭头函数类似于普通函数。我这样使用没有任何问题:
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/