据我所知,箭头功能与普通功能类似。我这样使用时没有问题:
let X = () => {};
let Y = function() {};
X();
Y();
但是,当我将其与new
let X = () => {};
let Y = function() {};
x = new X();
y = new Y();
Uncaught TypeError: X is not a constructor
请你解释一下为什么?非常感谢。
答案 0 :(得分:11)
您可能希望澄清您的问题。
问。 我做错了什么?
A。您使用了new
箭头功能,并且不允许这样做。
问。 我可以将箭头功能转换为构造函数吗?
A。只能将其包装在正常的功能中,这很愚蠢。 您无法将箭头函数本身转换为构造函数。
问。 您能解释一下规范如何禁止new
使用箭头功能吗?
A. 要成为构造函数,函数对象必须具有
一个[[Construct]]
内部方法。
使用function
创建的功能
关键字是构造函数,一些内置函数也是如此
例如Date
。这些是您可以使用new
。
其他功能对象没有[[Construct]]
内部方法。这些包括箭头功能。所以你不能
使用new
。这是有道理的,因为你can't set
the this
value of an arrow function。
某些内置函数也不是构造函数。例如。您
不能new parseInt()
。
问。 您能否解释禁止new
背后的理由
使用规范中的箭头函数?
A。使用常识,或搜索es-discuss archives。
答案 1 :(得分:1)
箭头功能与普通功能不同。箭头函数中的arguments
和this
引用它们的外部函数。
执行代码new Foo(...)
时,会发生以下情况:
由于箭头函数中的this
引用其外部函数(箭头函数从其声明上下文继承this
,如@Iven所说),使用new
关键字和箭头函数没有意义。