Javascript ES6 Arrow函数异常行为

Javascript ES6 Arrow函数异常行为,javascript,ecmascript-6,Javascript,Ecmascript 6,大家好,我对arrow函数有点困惑。我阅读了mozila开发人员的arrow函数文档,发现arrow函数不能用作构造函数,在与new一起使用时会抛出错误。但是在这个例子中,我没有得到任何错误,它返回一个空对象,但是我传递了我想要构造对象的参数 这是你的电话号码 输出是:ConstructObjectArrow{},并且它有一个proto,正如文档中所说的,它没有定义。您不能将arrow函数用于构造函数,这样做没有意义 根据定义,arrow函数从词法上下文中获取其this值。因此,它将不会有来自新

大家好,我对arrow函数有点困惑。我阅读了mozila开发人员的arrow函数文档,发现arrow函数不能用作构造函数,在与new一起使用时会抛出错误。但是在这个例子中,我没有得到任何错误,它返回一个空对象,但是我传递了我想要构造对象的参数

这是你的电话号码


输出是:ConstructObjectArrow{},并且它有一个proto,正如文档中所说的,它没有定义。

您不能将arrow函数用于构造函数,这样做没有意义

根据定义,arrow函数从词法上下文中获取其
this
值。因此,它将不会有来自新对象的
值,因此它不能作为构造函数工作

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

请记住,箭头函数不仅仅是一种语法快捷方式,它们会导致行为上的差异,值为
this
,这种差异仅适用于某些情况

您可能想阅读这篇文章,其中进一步解释:


在Javascript实现内部,构造函数必须是某种类型的函数对象,它具有各种内部方法,例如
[[Construct]]
,而箭头函数没有这些内部属性。因此,当您尝试对其调用
new
时,解释器发现您没有将正确类型的函数传递给
new
,因此它创建了一个运行时错误。

我得到
TypeError:ConstructObjectArrow不是构造函数。你是在什么环境下测试的?@Sirko我正在使用一个在线编辑器这是你链接到问题解释页面的链接可能的副本,输出是:ConstructObjectArrow{},并且它有一个proto,正如文档中所说的未定义。-不,不是。如果您使用Babel运行此代码,它显然无法正常工作,因为箭头会被传输到常规函数。@AhmedAbdElNasser-这是否回答了您的问题?如果是这样的话,您可以通过单击答案左侧的复选标记向社区表明这一点,并且还可以通过遵循此处的正确程序为自己赢得一些声誉点数。
let ConstructObjectArrow = (name, age, city)=>{
  this.name = name;
  this.age = age;
  this.city = city;
}

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