大家好,我对箭头函数有些困惑,我阅读了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 {},它具有未如文档所述未定义的原型。
答案 0 :(得分:3)
不能将箭头函数用于构造函数,这样做没有任何意义。
根据定义,箭头函数从词汇上下文中获取其this
值。因此,它将没有新对象中的this
值,因此它不能用作构造函数。
因此,解释器甚至不让您尝试生成TypeError,因为您没有将适当类型的构造函数传递给new
。
请记住,箭头功能不仅是语法上的捷径,而且会引起行为的差异,其值为this
,并且该差异仅在某些情况下才适用。
您可能想阅读这篇文章,其中进一步说明:When not to use arrow functions。
Javascript实现的内部,构造函数必须是某种类型的Function对象,该对象具有各种内部方法,例如[[Construct]]
,而arrow函数不具有这些内部属性。因此,当您尝试在其上调用new
时,解释器发现您没有将正确类型的函数传递给new
,因此会产生运行时错误。