ES6箭头功能异常行为

时间:2018-06-24 14:52:08

标签: javascript ecmascript-6

大家好,我对箭头函数有些困惑,我阅读了mozila开发人员的箭头函数文档,发现箭头函数不能用作构造函数,与new一起使用时会出错。但在此示例中,我没有遇到任何错误,它返回了一个空对象,但是我传递了要用来构造该对象的参数。

这里是documentation

let ConstructObjectArrow = (name, age, city)=>{
  this.name = name;
  this.age = age;
  this.city = city;
}

let armin = new ConstructObjectArrow("Armin", 32, 'London');
console.log(armin);

输出为:ConstructObjectArrow {},它具有未如文档所述未定义的原型。

1 个答案:

答案 0 :(得分:3)

不能将箭头函数用于构造函数,这样做没有任何意义。

根据定义,箭头函数从词汇上下文中获取其this值。因此,它将没有新对象中的this值,因此它不能用作构造函数。

因此,解释器甚至不让您尝试生成TypeError,因为您没有将适当类型的构造函数传递给new

请记住,箭头功能不仅是语法上的捷径,而且会引起行为的差异,其值为this,并且该差异仅在某些情况下才适用。

您可能想阅读这篇文章,其中进一步说明:When not to use arrow functions

Javascript实现的内部,构造函数必须是某种类型的Function对象,该对象具有各种内部方法,例如[[Construct]],而arrow函数不具有这些内部属性。因此,当您尝试在其上调用new时,解释器发现您没有将正确类型的函数传递给new,因此会产生运行时错误。