原型方法可以做什么而 es6 class 不能?

What can prototypal approach do that es6 class can't?

有什么只能通过 classic/old 原型方法才能实现的吗?

为什么我需要这个:假设我正在编写一个没有旧东西的 JS 子集(原型而不是 类、var 等)

有几件事,包括但不限于:

  • 使用function表示法时,可以不用new调用构造函数。 class 表示法禁止这样做。

    作为旁注:传统上子类化是用 MyParentClass.call(this) 之类的东西完成的(当 MyParentClass 被定义为 class 时,这是不允许的),你现在会将 class 语法与 extendssuper 关键字相结合。

  • function 声明可以在使用后出现,因为它们被提升了,class 声明不是。
  • function 声明可以被新声明覆盖,class 声明不能重新定义之前的声明
  • 原型方法在以旧样式定义时可以用作构造函数,而不是在使用 class 语法定义时。
  • function 声明可以在 "sloppy" 模式(非严格)下进行,而 class 方法总是 运行 在严格模式下。因此,您不能在 class 表示法中使用 methods/constructor 的 callercalleearguments 属性。当然,严格模式的所有其他后果也适用。把它们都列在这里就太过分了。
  • 您可以将新对象分配给旧式函数的 prototype 属性(它是可写的)。使用 classprototype 属性 不可写(请注意,这并不意味着您不能 改变 它)。