引用ES.next静态类属性的正确方法是什么?

时间:2016-10-25 01:13:28

标签: javascript class ecmascript-next es6-class

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

'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引用静态var?是否有更好/更正的方法来跟踪实例化Upload对象的数量?

1 个答案:

答案 0 :(得分:2)

构造函数中的

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

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

static uploadCount = 20;

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

Upload.uploadCount = 20;

在课程定义之后加上它并具有可移植性。

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