Ric*_*cky 6 javascript function ecmascript-6 arrow-functions
据我所知,箭头功能类似于普通功能.我这样使用时没有问题:
let X = () => {};
let Y = function() {};
X();
Y();Run Code Online (Sandbox Code Playgroud)
但是,当我使用它时发生错误 new
let X = () => {};
let Y = function() {};
x = new X();
y = new Y();Run Code Online (Sandbox Code Playgroud)
Uncaught TypeError: X is not a constructor
你能解释一下为什么吗?非常感谢.
Bug*_*nny 12
箭头函数与普通函数不同义。arguments内部this箭头函数引用其外部函数。
当代码new Foo(...)执行时,会发生以下情况:
由于this箭头函数内部引用其外部函数(箭头函数this从其声明上下文继承,正如 @Iven 所说),因此new在箭头函数中使用关键字并没有真正意义。
198*_*983 12
您可能希望澄清您的问题.
问:我做错了什么?
A.您使用new箭头功能,这是不允许的.
问:我可以将箭头函数转换为构造函数吗?
A.只能将它包装在正常的功能中,这将是愚蠢的.您无法将箭头函数本身转换为构造函数.
问:你能解释一下规范如何不允许new使用箭头功能吗?
A.要成为构造函数,函数对象必须具有[[Construct]]
内部方法.
使用function
关键字创建的函数是构造函数,一些内置函数也是如此Date.这些是您可以使用的功能new.
其他函数对象没有[[Construct]]
内部方法.这些包括箭头功能.所以你不能使用new这些.这是有道理的,因为您无法设置this箭头函数的值.
一些内置函数也不是构造函数.你不能这样做new parseInt().
问:你能解释new
说明书中禁用箭头功能背后的理由吗?
A.使用常识,或搜索es-discuss档案.
| 归档时间: |
|
| 查看次数: |
2937 次 |
| 最近记录: |