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

'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版本中提出的,但是最后我检查了它尚未确定。

08-17 17:17