ES的正确称呼是什么?下一个静态类属性

What is the proper way to refer to ES.next static class properties?

本文关键字:下一个 静态类 属性 是什么 ES      更新时间:2023-09-26

我有以下代码,它按预期工作,但我不相信这是正确的方式:

'use strict';
class Upload {
  static uploadCount = 20;
  constructor(props) {
    Upload.uploadCount++;
  }
  static get count() {
    return this.uploadCount;
  }
}
const up1 = new Upload({
  name: 'Wow.pdf',
  size: 123123,
});
const up2 = new Upload({
  name: 'doit.pdf',
  size: 9999999,
});
console.log(Upload.count);

为什么constructor不能像静态getter那样通过this.uploadCount引用静态变量?是否有更好/正确的方法来跟踪实例化Upload对象的数量?

this在构造函数中引用刚刚创建的对象实例。静态属性是构造函数本身的属性,而不是实例的属性。因此,如果您想从实例方法中引用它们,则必须使用Upload.uploadCount中的构造函数名称。


你正在使用的语法:

static uploadCount = 20;

不是ES2015的标准部分,我所知道的唯一可以确定的地方是Babel。如果您想要可移植的代码并且不使用Babel,则不应该使用该语法。你可以改成老式的:

Upload.uploadCount = 20;

放在类定义之后,具有可移植性


仅供参考,您用于静态属性的语法是为未来的JS修订提出的,但上次我检查它还没有决定。