我有以下代码,它可以按预期工作,但是我不确信这是正确的方法:
'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版本中提出的,但是最后我检查了它尚未确定。