Javascript中箭头函数的动机是什么?

What is the motivation of arrow functions in Javascript?

我一直在 Javascript 工作。最近他们在 ES6 中添加了箭头函数,其优点是

  1. 短语法
  2. this
  3. 的范围安全
  4. 清晰度

但是使用箭头函数有一些缺点:

  1. 它不继承 Function 原型
  2. 我们不能将它与具有动态上下文的回调函数一起使用
  3. 不能用作构造函数

我想请教以下问题:

  1. 他们为什么不继承Function原型?
  2. 它们是为了增加 javascript 中函数式编程的使用吗? (背后的动机)

我问这个是因为 mdn 页面说它没有原型但没有解释为什么它没有原型。

我阅读了 Eric Elliot 的 this 系列,我认为我们正在 javascript 中采用函数式编程方法,并且由于计划发布,我们是否有机会在此中删除 OOPS在不久的将来?

It doesn't inherit the Function prototype

当然有。

Object.getPrototypeOf(() => {}) === Function.prototype

We can't use it with callback function with dynamic context and it can't be used as constructor

是的,这符合逻辑 this 词法范围。

Are they made to increase the usage functional programming in javascript?

不,它们是为了简化书写功能而设计的,例如回调。当然,这使得它们对函数式编程也很有用,但我认为这不是主要动机。词法 this 是一个明确的 OOP 特性。

关于函数继承的说法是错误的,很可能与它们 don't have prototype property 的事实相混淆。这是他们不能成为构造函数这一事实的直接后果。不能用 new 构造对象的函数不需要 prototype.

它们就是这样,函数没有自己的 this 上下文,它们保留词法 this。它们不仅仅是输入 function 的更短方式。他们的潜在用例是各种需要保留上下文或根本不使用 this 的回调。如果箭头不适合这种情况,那么常规 function 就是这种情况。

ES2015 arrows 是从 CoffeeScript 借来的,在那里他们已经证明了很长时间的有用性。