我有以下代码,它按预期工作,但我不相信它是正确的方法:
'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
对象的数量?
答案 0 :(得分:2)
this
引用刚刚创建的对象实例。静态属性是构造函数本身的属性,而不是实例。因此,如果要从实例方法引用它们,则必须使用Upload.uploadCount
中的构造函数名称。
仅供参考,您使用的语法:
static uploadCount = 20;
不是ES2015的标准部分,我唯一知道它可以使用的地方是Babel。如果您想要可移植代码并且不使用Babel,则不应使用该语法。你可以改成老式的:
Upload.uploadCount = 20;
在课程定义之后加上它并具有可移植性。
仅供参考,您为未来的JS版本提出了用于静态属性的语法,但最后我检查了它还没有确定。