js“类”与经典类

Gro*_*ler 3 javascript prototypal-inheritance

我问了以下问题,为什么类在典型的无类原型继承语言(如 js)中使用类在基于原型继承的语言中使用

似乎它们是“语法糖”,因为大众喜欢类……而且它们只是背景中的常规 js 对象。

现在我想知道js假“类”和经典类之间的区别是什么?

lex*_*ore 5

如果我将 JS“类”与 Java 中的类进行比较,我首先要说的是JS“类”只是一个对象,而 Java 类不是

一个对象有它自己的属性/字段/方法。这也是 JS“类”可以拥有的。但是 Java 中的类不能,只有实例可以。

有些人可能会说“等等,但是静态字段和方法怎么样?我可以做一个静态MyClass.myField字段和MyClass.doSomething()方法。”

是的你可以。但从我的角度来看,它们只会被“放置”在MyClass命名空间中,它们并不是类的真正属性

  • 您没有this静态方法 - 但您可以this在 JS“类”中的类级方法中使用
  • 你不能用静态方法创建一个类来实现某个接口 - 假设鸭子类型作为接口这在 JS 中没有问题

因此,带有静态字段或方法的 Java 类只是这些字段和方法的命名空间,仅此而已。更明显的是,在静态方法中,您无法找出您所在的类(没有技巧):

从 Java 中的静态方法获取类名

因此,在 JS 中伪类是一流的对象,而在 Java 中则不是。