1

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

'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);

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

4

1 回答 1

2

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


仅供参考,您使用的语法:

static uploadCount = 20;

不是 ES2015 的标准部分,我知道唯一可以确定它可以工作的地方是 Babel。如果你想要可移植的代码并且不使用 Babel,那么你不应该使用那种语法。你可以换成老式的:

Upload.uploadCount = 20;

并将其放在类定义之后并具有可移植性。


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

于 2016-10-25T01:20:39.100 回答